2009-08-11 1 views
5

[NSData writeToFile:options:error:]에 의해 반환 된 값의 의미를 이해하려고합니다. 이 메서드는 Apple의 설명서에 따라 BOOL을 반환하고, 작업이 성공하면 YES를 반환하고 그렇지 않으면 NO를 반환합니다.은 실패하지만 오류 오브젝트는 리턴되지 않습니다. 왜?

충분히 그렇긴하지만 그렇다고해도 오류 매개 변수가 검색 가능한 NSError * 값으로 설정된다고 가정했을 것입니다. 그러나 내가 건너오고있는 결과에서, 그것은 사실이 아니다. 따라서 나는 다소 혼란스럽고 실패의 원인을 파악하는 방법을 모른다.

NSError* error = nil; 
BOOL success = [data writeToFile: filePath error: &error]; 
if (error) 
    NSLog(@"error = %@", [error description]); 

success 내가 실행 해요 코드에 NO 것으로 판명하지만 NSLog 문은 실행되지 않습니다 :

재치에,이 코드 (어느 정도)를 가지고있다. 어째서?

하워드

답변

14

그것은 datanil 것을 가능,이 경우 [data writeToFile:error:] 반환 nil하지만 *error이 설정되지 않은있다.

+3

바로 그 것입니다. 고맙습니다. 이전에 당신이 nil 객체에 메시지를 보낼 수 있다는 사실 때문에 나는 물어 본 적이 없었습니다. 마침내 나는 진정한 Objective-C 프로그래머라고 생각한다. :-) – hkatz

+1

거의 항상 메시지를 보내지 않는 메시지는 몇 시간 만 죽일 수 있습니다. :) – ColdSteel

0

writeToFile 방법은 성공 TRUE와 당신이 실제로 확인하고 싶은 하시면서, 실패 할 경우 FALSE를 반환합니다.

그래서, 시도 :

if(!success) 

을 조건부로 대신 (오류)합니다.

+0

나는 성공을 시도했지만 == 아니오, 그 경우에는 (그리고 짧은 양식을 시도하는 경우를 가정합니다.) 방출 된 로그 문은 'error = (null)'입니다. 그것이 내가 이해하지 못하는 것입니다. – hkatz

+0

괜찮은 오류 처리를 위해 IMO를 사용하면 성공과 오류를 모두 확인해야합니다. 데이터가 0이면 성공하지는 않지만 오류가 발생하지 않습니다.이 경우 사용자에게 무엇인가를 알려 주어야합니다. – ColdSteel