2009-12-11 2 views
6

다소 일반적인 addPersistentStore를 NSPersistentStoreCoordinator에 보내고 & 오류 코드가 생성되었습니다. NSLog, NSError, 액세스 권한이 잘못되었습니다.

그래서 나는 그것을 NSLog 갔다, 나는이했을 때 액세스 오류가 발생했습니다 : 일반적인 관용구 것 같다

NSLog(@"Unresolved error %@, %@", error, [error userInfo]); 

합니다.

 NSLog(@"Unresolved error %@", [error userInfo]); 

가 ... 문제가 도망 갔어요 다음과 같이 나는 오류 문을 포맷

.

심지어 NSZombie가 잘못된 액세스 오류를 올바르게 트랩하지 않았습니다!

아이디어가 있으십니까?

답변

18

오류를 어떻게 만듭니 까?

올바른 방법은, described by bbum로이다 :

NSError *error; 
BOOL success = [blah blah:blah error:&error]; 
if (!success) { 
    NSLog(@"Error: %@ %@", error, [error userInfo]); //Or other error handling (e.g., [NSApp presentError:error]). 
} else { 
    //Succeeded—ignore the error variable entirely 
} 

(즉, BOOL를 반환하는 방법 blah:error:위한거야, 질문 bbum의 예는 객체를 반환하는 방법에 대한이었다 대답 에러 -. 처리 패턴은 두 경우 모두 동일합니다.

잠깐 후 트위터 업데이트에 따르면 some APIs will output an error object under the hood even if what you asked for succeeded에 따르면 BOOL 대신 오류 변수를 테스트하면 나을 수 있습니다. 나는 이것이 당신에게 일어난 일이라고 생각합니다.

해결책은 만보고하면 API에서 오류를보고합니다.

1

그 문제가 해결되지 않으면 nil이 값

NSError* err = nil; 
[anObject doSomethingGetError:&err]; 
if (err) { 
    NSLog(...); 
} 

로 NSError를 초기화하기 위해서 잊지 마세요,이 API는 무효로`nil` 초기화를 내리 쳤을 경우 도움이되지 않습니다 API의 버그

+1

입니다 (또는 유효하지만 의미가없는) 객체. 내 대답과 @bbum에서 인용 한 트윗을 참조하십시오. –

+0

오류가없는 경우 API가 "오류"참조 [아무 것도 없음]를 터치하지 않습니다. - (NSPersistentStore *) addPersistentStoreWithType : (NSString *) storeType 구성 : (NSString *) 구성 URL : (NSURL *) storeURL 옵션 : (NSDictionary *) 옵션 오류 : (NSError **) 오류; 이 메소드 반환은 BOOL 유형이 – vaddieg

+0

이 아닙니다. 실제로 err 객체를 nil로 설정하면 err 객체가 발생할 경우 검사하는 데 관심이 있음을 나타냅니다. @Peter Hosey의 대답은 메서드 호출이 성공했는지 아닌지를 결정하는 올바른 방법을 보여줍니다. –

관련 문제