1

plistファイルに情報を書き込もうとして数時間頭痛がします。私のplistは次のようになります:

<plist version="1.0">
<array>
<dict>
    <key>page</key>
    <string>page 1</string>
    <key>description</key>
    <string>description  text 1</string>
</dict>
<dict>
    <key>page</key>
    <string>page 2</string>
    <key>description</key>
    <string>description text 2</string>
</dict>
</array>
</plist>

3ページの説明説明テキスト3のようにplistに新しいエントリを書きたいだけです

これは私が使用するコードです

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,   NSUserDomainMask, YES); //1
NSString *documentsDirectory = [paths objectAtIndex:0]; //2
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"bookmark.plist"]; //
NSMutableDictionary *rootArray = [[NSMutableDictionary alloc] initWithContentsOfFile:path];
[rootArray setObject:@"Jimmy1" forKey:@"page"];
    [rootArray setObject:@"Jimmy2" forKey:@"description"];
    [rootArray writeToFile:path atomically:YES];

実行してもエラーメッセージは表示されませんが、bookmark.plistに何も書き込まれません。この問題を解決する方法について教えてください。

ありがとう

4

2 に答える 2

2

あなたの問題は、ルート辞書ではなく辞書の配列があることだと思います。したがって、初期化するNSMutableDictionaryと、実際に配列を取得します。

を初期化し、必要NSMutableArrayなオブジェクトを持つオブジェクトとして新しい辞書を追加する必要があると思います。次に、配列をファイルに書き込みます。

NSMutableArray *rootArray = [[NSMutableArray alloc] initWithContentsOfFile:path];
NSDictionary *newPage = [NSDictionary dictionaryWithObjectsAndKeys: @"Page 3", @"page", @"Description text 3", @"description"];

[rootArray addObject:newPage];

[rootArray writeToFile:path atomically:YES];

Xcodeでこれをチェックしていませんが、これが問題の原因だと思います。

アップデート

間違いなくラフルの答えをチェックしてください。彼は、writeメソッドをifステートメントでラップすることを思い出しました。これは間違いなくエラー処理のベストプラクティスです。

于 2012-08-14T14:34:25.600 に答える
1

あなたの問題は

NSMutableDictionary *rootArray = [[NSMutableDictionary alloc] initWithContentsOfFile:path];` //it will return you array of dict not dictionary

これを試して

 // get your plist file path    
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,   NSUserDomainMask, YES); //1
    NSString *documentsDirectory = [paths objectAtIndex:0]; //2
    NSString *path = [documentsDirectory stringByAppendingPathComponent:@"bookmark.plist"];

// get content of your plist file     
NSMutableArray *rootArray = [[NSMutableArray alloc] initWithContentsOfFile:path];

// create new dictionary with new content
NSDictionary *newPage = [NSDictionary dictionaryWithObjectsAndKeys: @"Page 3", @"page", @"Description text 3", @"description"];

// add new dictionnay to your rootArray
[rootArray addObject:newPage];

if([rootArray writeToFile:path atomically:YES]) // it will return bool value
{
   NSLog(@"Successfully finished writing to file");
}
else
{
    NSLog(@"failed to write");
}
于 2012-08-14T14:47:50.900 に答える