program story

모범 사례-자신의 프로젝트 / 앱에 대한 NSError 도메인 및 코드

inputbox 2020. 8. 4. 07:19
반응형

모범 사례-자신의 프로젝트 / 앱에 대한 NSError 도메인 및 코드


거기에있다 이전 SO 게시물을 자신의 프레임 워크에 대한 오류 도메인을 설정에 대한,하지만 오류 도메인 및 사용자 지정 오류 코드를 설정에 관한 가장 좋은 방법은 무엇인가 자신의 프로젝트 / 앱은 ?

예를 들어, 많은 검증을 통해 Core Data- 집약적 앱을 작업한다고 가정 할 때, "즉시"Core Data 오류 코드 (예 : NSManagedObjectValidationErrorfrom 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:NSManagedObjectContextNSUnderlyingErrorKey


의견을 말할 충분한 담당자가 없지만 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에 지정하고 완료하십시오.

참고 URL : https://stackoverflow.com/questions/3276127/best-practice-nserror-domains-and-codes-for-your-own-project-app

반응형