.plist文件写入失败!这段代码有什么问题?

时间:2012-04-27 08:54:15

标签: objective-c ios cocoa plist nsmutabledictionary

此代码后我的plist文件中没有写入任何内容。我的代码出了什么问题?

NSString *path = [[NSBundle mainBundle] bundlePath];
NSString *finalPath = [path stringByAppendingPathComponent:@"aFile.plist"];
NSMutableDictionary *reqData = [NSMutableDictionary dictionaryWithContentsOfFile:finalPath];
/*
some modifications to "reqData"
*/
[reqData writeToFile:finalPath atomically:YES];

没有任何内容写入文件。可能是什么问题?

4 个答案:

答案 0 :(得分:2)

您最好写入文件夹:

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
                                                     NSUserDomainMask,
                                                     YES);
NSString *path = [paths objectAtIndex:0];

<强>更新

根据NSDictionary Class Reference

  

此方法在写出文件之前以递归方式验证所有包含的对象是属性列表对象(NSData,NSDate,NSNumber,NSString,NSArray或NSDictionary的实例),如果所有对象都不是属性列表对象,则返回NO ,因为结果文件不是有效的属性列表。

在整本字典中是否有除这些有效类型以外的对象?

答案 1 :(得分:1)

您正尝试将该文件写回应用包。

这最有可能导致错误。

如果您尝试将其写在其他位置(例如在桌面文件夹中),该怎么办?

答案 2 :(得分:0)

如果您将plist包含在您的应用程序中,您将需要在应用程序首次启动时直接将该文件复制到Documents中(如果尚未在那里复制)。然后,您要对plist执行的任何读写操作都应该从Documents目录中的副本而不是应用程序包中的版本完成。

答案 3 :(得分:0)

要记住的第一件事:

您可以从资源中读取plist文件,但无法修改它。

如果你想修改,

  1. 将该文件复制到Documents目录
  2. 根据类型
  3. 将plist的内容复制到数组或字典中
  4. 进行您想要的更改
  5. 最后......将其保存回文件目录
  6. 做的伎俩