0

NSArray をファイルに保存し始めていますが、応答として nil を取得し続けています...

Apple のドキュメントによると、nil はファイルが存在しないことを意味しますが、私のファイルは存在すると確信しています (パスを正しく作成していない可能性があります)...

NSArray をファイルに保存するために使用するコードは次のとおりです...

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"scorecards" ofType:@"dgs"];

NSArray *myArray = [[NSArray alloc] initWithObjects:@"J", @"ANA", @"MY", @"GDON", nil];

[myArray writeToFile:filePath atomically:YES];

NSArray *mynewArray = [NSArray arrayWithContentsOfFile:filePath];

NSLog(@"%@", [mynewArray objectAtIndex:2]);

また、私のファイルが存在することを示すために、Xcode のスクリーンショットを撮りました...

Xcode スクリーンショット

ファイルは明らかにグループScorecardsSavedに保存され、ファイルは拡張子dgsを持つスコアカードと呼ばれます(特定のアプリケーション - Dot Golf Scorecard - dgs 用に作成したもの)

4

2 に答える 2

2

実際、ファイルパスはこのpathForResourceメソッドを使用しているため、アプリケーションバンドル内の書き込み不可能な場所を指します。

代わりに、デバイス/シミュレータのアプリケーションドキュメントディレクトリに書き込む必要があります。

NSURL *documentsDirectory = 
   [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory 
     inDomains:NSUserDomainMask] lastObject];
NSURL *fileURL = [documentsDirectory 
   URLByAppendingPathComponent:@"storecards.dgs"];

したがって、ドキュメントのバンドルバージョンにシードデータが含まれている場合は、最初にそれをアプリドキュメントディレクトリにコピーします。

于 2012-06-18T21:16:18.997 に答える
1
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *filePath = [documentsDirectory stringByAppendingPathComponent:FILE_NAME];

[myArray writeToFile:filePath atomically:YES];
于 2012-06-18T21:27:25.843 に答える