【问题标题】:On updating iOS app, force plist in Documents to be overwritten/deleted?在更新 iOS 应用程序时,强制覆盖/删除文档中的 plist?
【发布时间】:2012-06-22 13:51:09
【问题描述】:

我猜我的一般问题是我在谷歌上搜索到的没有运气:是否有在应用程序更新后立即调用的方法?

更多细节:我的情况是我在捆绑包中有一个 plist。当用户第一次尝试访问 plist 时,我会检查 Documents 目录,如果它不存在,则从包中复制它。这允许用户在必要时用他们的数据覆盖。但是,每当我更新应用程序时,我都需要在包中有一个新的 plist,它将 覆盖 用户在 Documents 目录中的现有 plist。显然,我只希望在应用程序更新后发生这种情况,而不仅仅是每次应用程序运行时。是否有捷径可寻?

【问题讨论】:

    标签: ios plist


    【解决方案1】:

    您可以将捆绑版本 (CFBundleVersion) 附加到要更新的 plist 中,并根据应用程序 info.plist 中存储的捆绑版本动态加载。

    所以对于 1.3 版,您需要加载 your_plist.1.3.plist

    NSString *plistString = [NSString stringWithFormat:@"your_plist_%@", [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]];
    
    [[NSBundle mainBundle] pathForResource:plistString ofType:@"plist"];
    

    【讨论】:

    • 这太好了,谢谢!由于您包含代码,因此您选择了正确的答案:)
    【解决方案2】:

    您可以做的是在 NSUserDefaults 中设置一个键,其中包含当前正在运行的应用程序修订版(您在每次发布时递增的某个常量,或者只是来自 CFBundleVersion 的值)。当您打开您的应用程序时,请快速检查版本是否低于当前版本,然后覆盖 plist 并更新存储的版本,以便后续启动相同版本不会导致覆盖 plist。对于后续启动,如果修订值相同,则继续执行应用程序的其余部分

    【讨论】:

    • 我一直使用这种方法。这是一种非常简单有效的方法。
    【解决方案3】:

    您还可以在代码中更改 plist 的名称。这样一个新的 plist 将被复制到文档文件夹中。您也可以添加代码来删除旧的:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-04
      • 1970-01-01
      • 2021-12-20
      • 1970-01-01
      • 1970-01-01
      • 2015-06-06
      相关资源
      最近更新 更多