2011-09-22 14 views
6

JSONからNSDictionaryを取得しています(SBJsonを使用しています)、これを保存します。私は使用していますwriteToFileが失敗する - どのように失敗するのですか(どのツール)?

[liveData writeToFile:localFilePath atomically:YES] 

これは失敗します。データは、すべてのNSString、NSDictionary、およびNSArray(「アトミック:YES」要求)のようにとなります。私は他の場所で同じlocalFilePathを使用しました。

私の質問は次のとおりです。どのように問題がどこにあるかを知ることができますか? writeToFileが失敗する理由を理解するために使用できるツールは何ですか?ログにエラーメッセージは表示されません。

+0

あなたは値が何であるか見るためにあなたの 'localFilePath'をロギングしましたか?あなたはそれを保存するために一意の名前を付けてもよろしいですか? – msgambel

+0

問題があなたのパスであることに同意します。そのコードを含めることはできますか? – Brodie

+1

私はlocalFilePathをログに記録しました。私はコード内の別の場所に保存して、ファイル名だけを変更しました。それはNSTemporaryDirectory()とファイル名です。しかし、本当に私の質問です:どのように私はこの問題をデバッグする - どのように私は失敗の詳細を見つけることができますか?ロガーの外にあるxcodeにエラーコードやデバッグツールがありますが、それはピン止めに役立ちますか?あるいは、それを特定するために試行錯誤するだけでいいですか? –

答えて

7

それは複数の理由があり:

  • あなたが書いているパスが間違っている、いない書き込み可能に(あなたはそれへの書き込みアクセス権を持っていない)、またはlocalFilePathがある場合は、親ディレクトリが(存在しません。 "/path/to/file.plist"ただし、 "/ path/to /"ディレクトリが存在しない場合は失敗します)
  • liveData辞書には、PropertyListオブジェクトではないオブジェクトが含まれています。のみNSDataNSDateNSNumberNSStringNSArray、またはNSDictionaryオブジェクトは、プロパティリストファイル(およびwriteToFile:atomically:に書き込むことができる辞書が成功するために、その方法のためにだけplistのオブジェクトが含まれていなければならないのですので、plistファイルにの書き込みを行います)
+1

また、あなたの辞書に 'NULL'値がある場合、' writeToFile'は失敗します。 – inorganik

+0

辞書内のNSNullクラスの値はすべて失敗します。したがって、辞書に入れる前にすべての値を明示的にチェックしてください。私の場合、JSON(サーバーデータ)から値を読み取っていましたが、これはそのような値の良いソースです。 – zinnuree

1

私は、キーと値の数値だけを使ってNSDictionaryをディスクに保存しようとしました。キーをNSStringに切り替えるのは機能しますが、キーがNSNumberのときは機能しません。キーはNSStringでなければならないのですか?

EDIT:ハッシュに応答するオブジェクトであればよいことが分かりました。しかし、それはしばしばNSStringです。

+1

はいそうです。上記の私の答えを参照してください。 – badweasel

+0

一口...データをファイルに保存するためにNSNumberからNSStringに変換する必要がありました。先端に感謝します。 –

4

これは2歳の質問です。しかし、私はちょうど同じ問題を抱えていたので、ここで私が見つけたものを修正しました。あなたのNSDictionaryにはNSStringsではないいくつかのキーがあると思います。代わりのようなキーイングの

[_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

関連する問題