'카테고리'에 해당되는 글 1건

  1. 2013.07.19 NSError카테고리를 이용한 자체에러정의하기

최근의 앱들은 대부분 서버와의 연동이 필요하게 되었다. 서버의 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

댓글을 달아 주세요