2010-03-12 156 views
1

是否writeToFile:原子地将数据添加到现有的.plist?是否可以修改.plist中的值?应该重新编译应用以实现更改吗?objective-c添加到/编辑.plist文件

我在我的应用程序中有一个自定义的.plist列表。结构如下:

<array> 
<dict> 
    <key>Title</key> 
    <string>MyTitle</string> 
    <key>Measurement</key> 
    <dict> 
     <key>prop1</key> 
     <real>28.86392</real> 
     <key>prop2</key> 
     <real>75.12451</real> 
    </dict> 
    <key>Distance</key> 
    <dict> 
     <key>prop3</key> 
     <real>37.49229</real> 
     <key>prop4</key> 
     <real>58.64502</real> 
    </dict> 
</dict> 
</array> 

数组标签包含多个具有相同结构的项目。我需要将项目添加到现有的.plist。那可能吗?如果可以的话,我可以编写一个UIView来做到这一点。

*编辑 - 好的,我只是试图写文件希望希望它会覆盖如果不添加到它。奇怪的是,下面的代码在读写时选择不同的路径。

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

.plist文件在我的项目中。我可以从中读取。当我写入它时,它会创建.plist文件并将其保存在我的/users/.../library/中!这对任何人都有意义吗?

回答

1

我会假设应用程序附带的plist被假设为read only - 它位于应用程序包中。

任何更新都存储在用户特定的目录中,以便每个用户都有自己的特定修改。

+1

绝对正确。你不应该写入应用程序包中的任何文件。没有管理员权限的用户通常没有权限执行此操作。如果您需要存储持久数据,请将其存储在'〜/ Library/Application Support'中或使用'NSUserDefaults'。 – 2010-03-12 04:12:17

+0

谢谢。说得通。 – Dave 2010-03-12 06:31:23

1

当然,您可以创建和编写自己的.plist文件。通过NSArray *arrayPath=NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *userFile=[[arrayPath objectAtIndex:0] stringByAppendingString:@"/whatever.plist"];,您可以编写/编辑它。

但我也有同样的问题:我如何编辑对特定键的值,而不是覆盖整个.plist文件?

E.g.如果我想将<key>Title</key> <string>MyTitle</string>中的密钥“Title”的值“MyTitle”更改为“Sunflower”,那么我怎么能从代码中做到这一点?