2011-09-22 4 views
6

JSON (SBJson 사용)에서 NSDictionary를 가져오고 저장하려고합니다. 사용하고 있습니다.writeToFile 실패 - 어떻게 실패합니까 (어떤 도구) 디버깅합니까?

오류가 발생합니다. 데이터 은 모든 NSString, NSDictionary 및 NSArray ("원자 적으로 : 예"요구)와 비슷하게입니다. 다른 곳에서는 같은 localFilePath를 사용했습니다.

내 질문은 : 어떻게 문제를 찾을 수 있습니까? writeToFile이 실패한 이유를 이해하기 위해 어떤 툴을 사용할 수 있습니까? 로그에 오류 메시지가 표시되지 않습니다.

+0

값이 무엇인지 알기 위해'localFilePath'를 NSLogged 시켰습니까? 다른 이름으로 저장하려면 고유 한 이름을 지정 했습니까? – msgambel

+0

문제가 귀하의 경로 일 가능성이 있습니다. 해당 코드를 포함시킬 수 있습니까? – Brodie

+1

필자는 localFilePath를 기록했으며 다른 곳의 코드를 사용하여 파일 이름 만 바꾸면 NSTemporaryDirectory()와 파일 이름이 저장되기 때문에 다른 곳에서도 사용했습니다. 하지만 정말로 제 질문은 : 어떻게이 문제를 디버깅합니까 - 실패에 대해 더 자세히 알 수 있습니까? 로거 밖에서 xcode에 오류 코드 또는 일부 디버깅 도구가있어 문제를 해결할 수 있습니까? 또는 시행 착오를 사용하여 정확히 찾아야합니까? –

답변

7

그것은 여러 이유가있을 수 있습니다

  • 당신이 작성하는 경로는 (당신이 그것을에 쓰기 권한이없는) 쓰기, 잘못이 아니거나 localFilePath 경우 상위 디렉토리는하지 (존재 않습니다 "/path/to/file.plist"하지만 "/ path/to /"디렉토리가 없으면 실패합니다.
  • liveData 사전에는 PropertyList 객체가 아닌 객체가 포함되어 있습니다. 만 NSData, NSDateNSNumberNSString는, NSArray가, 또는 NSDictionary 객체는 속성 목록 파일에 기록 할 수있다 (그리고 사전 가 가지고 할 수 있도록 writeToFile:atomically:가 PLIST 파일에 쓰기 작업을 수행하는 방법이 성공하기 만 PLIST 객체가 포함)
+1

또한 주목할 가치가 있습니다. 사전에'NULL' 값이 있으면'writeToFile'가 실패합니다. – inorganik

+0

사전의 NSNull 클래스의 모든 값이 실패합니다. 따라서 사전에 넣기 전에 명시 적으로 모든 값을 확인하십시오. 필자의 경우, JSON (서버 데이터)에서 값을 읽는 것이 좋았습니다. – zinnuree

1

키와 값의 숫자만으로 디스크에 NSDictionary를 저장해 보았습니다. 키를 NSString으로 전환해도 작동하지만 키가 NSNumber 인 경우에는 작동하지 않습니다. 열쇠는 NSString이어야합니까?

편집 : 이제 해시에 응답하는 모든 개체가 될 수 있음을 알았습니다. 그래도 NSString이야.

+1

예. 위의 내 대답을 참조하십시오. – badweasel

+0

Sigh ... NSNumber를 NSString으로 변환하여 파일에 데이터를 저장해야했습니다. 팁 고마워. –

4

2 년 전의 질문입니다. 그러나 제가이 똑같은 문제를 가지고 있었기 때문에 여기에 제가 발견 한 것이 있습니다. NSDictionary에는 NSString이 아닌 일부 키가 있습니다. 대신 같은 키 입력의

:

[_myDictionay setObject:thisObj forKey:[NSNumber numberWithInt:keyNumber]]; 

키와 같은 : 바로 내 문제를 해결

[_myDictionay setObject:thisObj forKey:[NSString stringWithFormat:@"%i",numberWithInt:keyNumber]]; 

.

상단 경로는 plist 파일에 저장할 수 없습니다.

JSON 변환에서 정보를 얻으므로 거기에 NSNumbers 인 개체 또는 키가있을 수 있습니다. 당신은 그들을 개조해야 할 것입니다. 그러나 그것은 고통입니다.

json에서 이미 가지고 있기 때문에 json 문자열로 전체를 @ "data"키로 저장하고 plist를 나중에 배열이나 dict에로드 할 때 다시 확장하십시오.

+0

내 문제가 해결되었지만 (제 경우에는 NSDate였던 키를 가지고있었습니다), 디버깅에 사용할 수있는 도구에 대한 질문에 여전히 답하지 못했습니다. "* NSDate가 plist 파일 *에 쓰는 데 유효한 키가 아닌 것과 같은 것을 말하면 코드에서 찌를 수있는 것이 있다면 좋을 것입니다. – Olie

관련 문제