모범 사례-자신의 프로젝트 / 앱에 대한 NSError 도메인 및 코드
거기에있다 이전 SO 게시물을 자신의 프레임 워크에 대한 오류 도메인을 설정에 대한,하지만 오류 도메인 및 사용자 지정 오류 코드를 설정에 관한 가장 좋은 방법은 무엇인가 자신의 프로젝트 / 앱은 ?
예를 들어, 많은 검증을 통해 Core Data- 집약적 앱을 작업한다고 가정 할 때, "즉시"Core Data 오류 코드 (예 : NSManagedObjectValidationError
from CoreDataErrors.h
)를 고수 하거나 직접 작성하여 다음 MyAppErrors.h
과 같이 오류를 정의 해야하는 경우 더 구체적 (즉, MyAppValidationErrorInvalidCombinationOfLimbs
?
사용자 지정 오류 도메인과 오류 코드 집합을 만들면 코드가 크게 명확 해지지 만 유지 관리하기에는 너무 많은 오버 헤드가 발생하며 오류 코드 번호 매기기 충돌에 대해 걱정해야합니까? 아니면 다른 문제가 있습니까?
나는 개인적으로 역 DNS 스타일 도메인을 사용합니다. 예를 들면 다음과 같습니다.
NSError * myInternalError = [NSError errorWithDomain:@"com.davedelong.myproject" code:42 userInfo:someUserInfo];
도메인의 세 번째 부분 ( @"myproject"
)은이 프로젝트 ( "My Project"
)의 오류를 다른 프로젝트 ( "My Other Project"
=> com.davedelong.myotherproject
) 의 오류와 구별하기 위해 사용됩니다 .
그것은 그 개발자가 의도적으로 혼란하려고하지 않는 한, (나는 제 3 자 코드를 사용하고있는 경우) 내가 누구 다른 사람의 오류 도메인과 충돌하지 않을거야 것을 확인하는 간단한 방법입니다 단지 내가보기 엔 어려울 것 믿는 (나. ..).
코드 번호 충돌에 대해서는 걱정하지 마십시오. 코드가 도메인 내에서 고유 한 한 괜찮습니다.
오류를 번역하는 것은 당신에게 달려 있습니다. 무엇을하든 잘 문서화하십시오. 개인적으로 , 나는 모든 코드를 처리하고 모든 userInfo를 내 프로젝트에 더 특정한 것으로 변환 할 것이라고 확신하지 못하기 때문에 일반적으로 프레임 워크 생성 오류를 전달합니다. 프레임 워크는 더 많은 코드를 변경 및 추가하거나 기존 코드의 의미 등을 변경할 수 있습니다. 또한 오류의 출처를보다 구체적으로 식별하는 데 도움이됩니다. 예를 들어, StackKit 프레임 워크가 com.stackkit
도메인 에서 오류를 생성하면 프레임 워크 문제라는 것을 알고 있습니다. 그러나에서 오류가 발생하면 NSURLErrorDomain
특히 URL로드 메커니즘에서 비롯된 것입니다.
수행 할 수있는 작업은 프레임 워크 생성 오류를 캡처하여 도메인과 일반 코드 등이있는 새 오류 객체로 래핑 kFrameworkErrorCodeUnknown
한 다음 캡처 된 오류를 userInfo
아래에 배치하는 것 NSUnderlyingErrorKey
입니다. CoreData이 많이 (당신이하려고하면, 예를 들어, 수행 ,하지만 당신은 관계 무결성 오류를 가지고, 당신은 하나의 오류 등을 얻을 것이다, 그러나이 특별히 관계가 잘못되는 등의 더 많은 정보 등이 포함됩니다).save:
NSManagedObjectContext
NSUnderlyingErrorKey
의견을 말할 충분한 담당자가 없지만 Dave DeLong의 답변에 대해서는 [[NSBundle mainBundle] bundleIdentifier]
대신 대신 사용하는 것이 좋습니다 @"com.myName.myProject"
. 이런 식으로 이름이나 프로젝트 이름을 변경하면 정확하게 반영됩니다.
커스텀 NSError를 생성하는 방법 :
먼저 오류 메시지의 사전을 작성하십시오.
NSDictionary *userInfo = @{
NSLocalizedDescriptionKey: NSLocalizedString(@"Unknown Error - Please try again", nil),
NSLocalizedFailureReasonErrorKey: NSLocalizedString(@"Unknown Error - Please try again", nil),
NSLocalizedRecoverySuggestionErrorKey: NSLocalizedString(@"Unknown Error - Please try again", nil)
};
NSError *error = [NSError errorWithDomain:[[NSBundle mainBundle] bundleIdentifier]
code:-58 userInfo:userInfo];
그런 다음 userInfo를 NSDictionary에 지정하고 완료하십시오.
'program story' 카테고리의 다른 글
Django : 양식을 사용하여 하나의 템플릿에 여러 모델 (0) | 2020.08.04 |
---|---|
컴파일 코드와 실행 코드의 차이점은 무엇입니까? (0) | 2020.08.04 |
삼항 연산자가 Java의 "if"조건보다 빠릅니까? (0) | 2020.08.04 |
git-로컬이 삭제되었지만 파일이 원격에 존재할 때 병합 충돌 (0) | 2020.08.04 |
드롭 다운 목록에 빈 항목이없는 빈 HTML SELECT (0) | 2020.08.03 |