在更新 iOS 应用程序时,强制覆盖/删除文档中的 plist?

On updating iOS app, force plist in Documents to be overwritten/deleted?

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

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


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


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

所以对于 1.3 版,你会加载 your_plist.1.3.plist

1
2
3
NSString *plistString = [NSString stringWithFormat:@"your_plist_%@", [[NSBundle mainBundle] objectForInfoDictionaryKey:@"CFBundleVersion"]];

[[NSBundle mainBundle] pathForResource:plistString ofType:@"plist"];


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