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>

我只想在 plist 中写一个新条目,例如第 3 页描述描述文本 3

这是我使用的代码

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];

当我运行时,我没有收到任何错误消息,只是没有写任何东西到书签.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 中检查过这个,但我认为这是你问题的根源。

更新

一定要查看Rahul的答案。他记得将 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 回答