【问题标题】:objective-c Add to/Edit .plist fileObjective-c 添加到/编辑 .plist 文件
【发布时间】:2011-01-26 16:06:50
【问题描述】:

writeToFile: 是否以原子方式将数据添加到现有的 .plist 中?是否可以修改 .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 来做到这一点。

*EDIT - 好的,我只是试图写入文件,希望如果不添加它至少会覆盖它。奇怪的是,以下代码在读写时选择了不同的路径。

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

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

【问题讨论】:

    标签: objective-c info.plist root.plist


    【解决方案1】:

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

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

    【讨论】:

    • 绝对正确。您永远不应该写入应用程序包中的任何文件。没有管理员权限的用户通常无权执行此操作。如果您需要存储持久数据,请将其存储在~/Library/Application Support 或使用NSUserDefaults
    【解决方案2】:

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

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

    例如如果我想将 <key>Title</key> <string>MyTitle</string> 中的键“Title”的值“MyTitle”更改为“Sunflower”,我该如何从代码中做到这一点?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-27
      • 1970-01-01
      相关资源
      最近更新 更多