최근의 앱들은 대부분 서버와의 연동이 필요하게 되었다. 서버의 API를 이용함으로 인해서 발생되는 여러가지 에러를 NSError카테고리를 만들어 관리하면 편하다.

그로인해 서비스쪽(API를 이용한 비지니스 로직)과 화면쪽이 명확하게 분리되는 장점도 있다.


NSError+Service.h


#import <Foundation/Foundation.h>


#define KJErrorDomain @"com.kj-code.KJError"


/**

 * @brief enum KJErrorエラー定義

 */

typedef enum {

    KJErrorCodeNone = 0,                    ///< エラーなし

    KJErrorCodeInternalError,               ///< 内部エラー

    KJErrorCodeAuthenticationError,         ///< 認証エラー

    KJErrorCodeResponseStatusError,         ///< 応答エラー

KJErrorCode;


/**

 * @brief KJCodeエラーカテゴリークラス

 */

@interface NSError (Service)


/**

 * @brief NSErrorインスタンスを返却します。

 * 

 * @param KJErrorCode 定義したエラーコード

 * @param NSString エラーメッセージ文字列

 *

 * @return NSError インスタンス

 */

+ (NSError*)errorWithKJErrorCode:(KJErrorCode)code localizedDescription:(NSString*)localizedDescription;


/**

 * @brief NSErrorインスタンスを返却します。

 * @details KJErrorCodeに定義されているエラーメッセージがセットされます。

 *

 * @param KJErrorCode 定義したエラーコード

 *

 * @return NSError インスタンス

 */

+ (NSError*)errorWithKJErrorCode:(KJErrorCode)code;


@end




NSError+Service.m


#import "NSError+Service.h"


static NSString* _KJ_CODEDESCRIPTION[] = {

    @"",

    @"KJError.InternalError",

    @"KJError.AuthenticationError",

    @"KJError.ResponseStatusError",

};


@implementation NSError (Service)


+ (NSError*)errorWithKJErrorCode:(KJErrorCode)code localizedDescription:(NSString*)localizedDescription {


    NSDictionary *userInfo = [NSDictionary dictionaryWithObject:localizedDescription forKey:NSLocalizedDescriptionKey];

    

    NSError *error = [[self class] errorWithDomain:KJErrorDomain code:code userInfo:userInfo];

    return error;

}


+ (NSError*)errorWithKJErrorCode:(KJErrorCode)code {


    NSString *description = _KJ_CODEDESCRIPTION[code];

    NSDictionary *userInfo = [NSDictionary dictionaryWithObject:description forKey:NSLocalizedDescriptionKey];

    

    NSError *error = [[self class] errorWithDomain:KJErrorDomain code:code userInfo:userInfo];

    return error;

}




사용할 때는  이렇게 사용한다.



NSError *error = [NSError errorWithKJErrorCode:KJErrorCodeInternalError

                                                      localizedDescription:message];



Posted by 악당잰 트랙백 0 : 댓글 0

댓글을 달아 주세요