최근의 앱들은 대부분 서버와의 연동이 필요하게 되었다. 서버의 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];
'코딩(プログラミング)' 카테고리의 다른 글
iOS에서 <Error>: Max open files: 78 에러원인은? (0) | 2013.08.12 |
---|---|
블럭코드에서의 ARC Retain Cycle Error 해결방법 (0) | 2013.07.23 |
NSError카테고리를 이용한 자체에러정의하기 (0) | 2013.07.19 |
cpp 파일(C++)의 wrapper클래스 만들어 사용하기(2) (0) | 2013.07.18 |
XCode(Objective-C)상에서 cpp 파일(C++) 사용하기(1) (2) | 2013.07.11 |
iPhone에서 DropBox, SkyDrive, GoogleDrive API 연동하기. (3) | 2013.07.10 |
댓글을 달아 주세요