ユーザーのアプリケーションのDocumentsフォルダーにデータを書き込む方法を説明するコードスニペットをいくつか見つけました。ただし、iPhoneシミュレーターでこれを試してみると、ファイルは作成されません。私は呼びました
[NSFileManager isWritbleAtPath:<my document folder>]
そしてそれは0(false)を返しました。このフォルダを明示的に書き込み可能にする必要がありますか?その場合、どうすればよいですか?
ユーザーのアプリケーションのDocumentsフォルダーにデータを書き込む方法を説明するコードスニペットをいくつか見つけました。ただし、iPhoneシミュレーターでこれを試してみると、ファイルは作成されません。私は呼びました
[NSFileManager isWritbleAtPath:<my document folder>]
そしてそれは0(false)を返しました。このフォルダを明示的に書き込み可能にする必要がありますか?その場合、どうすればよいですか?
iPhoneシミュレータは、ディスク全体に書き込めるはずです。私のアプリは定期的にテストファイルをブートボリュームのルートレベルにダンプします(を使用して[NSData's writeToPath:@"/test.jpg" atomically:NO]
)。
ドキュメントフォルダへのパスを正しく決定したことを確認しますか?パスのチルダを拡張する必要があります。これが私のアプリがドキュメントフォルダに物を置くために使用するコードです。これ以上のセットアップは必要ないと思います!
brushesDir = [[@"~/Documents/BrushPacks/" stringByExpandingTildeInPath] retain];
// create brush packs folder if it does not exist
if (![[NSFileManager defaultManager] fileExistsAtPath: brushesDir])
[[NSFileManager defaultManager] createDirectoryAtPath:brushesDir withIntermediateDirectories:YES attributes:nil error:nil];
NSLog(@"writable: %d", [[NSFileManager defaultManager] isWritableFileAtPath:NSHomeDirectory()]);
これにより、コンソールに1が出力されます。
メソッドisWritableAtPathまたはisWritableFileAtPathを呼び出すつもりでしたか?そして、それをクラス自体で呼び出すのか、それとも(デフォルトの)インスタンスで呼び出すのか?
NSBundle へのファイルの書き込みに些細な問題がありました。アプリが起動したらすぐにサーバーでテキスト ファイルを更新する必要があるという要件があり、シミュレーターではうまく機能しましたが、デバイスでは機能しませんでした。後で、NSBundle に書き込み権限がないことがわかりました。ファイルを NSBundle から Documents ディレクトリにコピーし、目的に使用することで問題が解決しました。私が使う :
[myPlistData writeToFile:fileName atomically:NO];
ポインタをありがとう。そこで、いくつかのドキュメントに苦労した結果、自分が間違っていたことを発見しました: NSDictionary、NSArray、NSString などの基本的なデータ型で構成されていない NSArray を保存しようとしたことです。MPMediaItems の配列を保存しようとしていました (SDK 3.0 以降の MediaKit フレームワークから)。