いくつかのコメントを plist に保存しようとしていますが、それは単なるプロトタイプであるため問題ありません。問題は、plist から読み取ることができることですが、その後書き込みと読み取りを試みると、「範囲外の配列」例外がスローされます。ここで何が間違っているのかわかりません。
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Comments" ofType:@"plist"];
NSMutableArray *plistArray = [[NSMutableArray alloc] initWithContentsOfFile:filePath];
NSMutableDictionary *newComment = [NSMutableDictionary dictionary];
[newComment setValue:commentTitle.text forKey:@"title"];
[newComment setValue:comment forKey:@"comment"];
[plistArray addObject:newComment];
[plistArray writeToFile:filePath atomically:NO];
それはうまくいきます、それから私は読んでみます:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Comments" ofType:@"plist"];
NSMutableArray *plistArray = [[NSMutableArray alloc] initWithContentsOfFile:filePath];
NSMutableDictionary *dictionary = (NSMutableDictionary *) [plistArray objectAtIndex:0];
NSLog(@"%@", [dictionary objectForKey:@"title"]);
そして、それは例外をスローします。
項目を plist に手動で追加すると、正常に動作します。これは、読み取りコードが正常であることを意味すると思います。
それは私のplistの構造でしょうか?
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
</array>
</plist>
*キャッチされない例外 'NSRangeException' が原因でアプリを終了します。理由: '-[__NSCFArray objectAtIndex:]: index (1) beyond bounds (1)'
plistに書き込む前に、配列に「説明」を追加しました。次のコードを使用する場合:
NSString *aDocumentsDirectory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
// NSString *aFilePath = [NSString stringWithFormat:@"%@/Comments.plist", aDocumentsDirectory];
//
// NSMutableArray *plistArray = [[NSMutableArray alloc] initWithContentsOfFile:aFilePath];
戻り値は (null)
しかし、私が使用する場合:
NSString *filePath = [[NSBundle mainBundle] pathForResource:@"Comments" ofType:@"plist"];
NSMutableArray *plistArray = [[NSMutableArray alloc] initWithContentsOfFile:filePath];
配列の内容が表示され、すべて正常に動作しています。
問題は次のとおりです。どちらの方法でもファイルに書き込むことができず、「NO」を返し続けます。そして、私はすでに権限を確認しました