首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >写入plist文件

写入plist文件
EN

Stack Overflow用户
提问于 2012-08-14 22:24:01
回答 2查看 513关注 0票数 1

我有几个小时的头痛,试图写一些信息到plist文件。我的plist看起来像这样:

代码语言:javascript
复制
<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

这是我使用的代码

代码语言:javascript
复制
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写了任何东西,你能给我一个如何解决这个问题的想法吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-14 22:34:26

我相信你的问题是你有一个字典数组,而不是一个根字典。所以当你初始化你的NSMutableDictionary时,你实际上得到了一个数组。

我认为你需要初始化一个NSMutableArray,添加一个新的字典作为拥有你想要的对象的对象。然后将数组写入文件。

代码语言:javascript
复制
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语句中,这绝对是错误处理的最佳实践。

票数 2
EN

Stack Overflow用户

发布于 2012-08-14 22:47:51

你的问题是

代码语言:javascript
复制
NSMutableDictionary *rootArray = [[NSMutableDictionary alloc] initWithContentsOfFile:path];` //it will return you array of dict not dictionary

尝尝这个

代码语言:javascript
复制
 // 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");
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11954434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档