我想我在谷歌上搜索的一般问题没有运气:是否有一种方法可以在应用程序更新后立即调用?
更多细节:我的情况是我在捆绑包中有一个 plist。当用户第一次尝试访问 plist 时,我会检查 Documents 目录,如果它不存在,则从包中复制它。这允许用户在必要时用他们的数据覆盖。但是,每当我更新应用程序时,我都需要在包中有一个新的 plist,它将覆盖用户在 Documents 目录中的现有 plist。显然,我只希望在应用程序更新后发生这种情况,而不仅仅是每次应用程序运行时。是否有捷径可寻?
您可以将捆绑版本 (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"];
您可以做的是在 NSUserDefaults 中设置一个键,其中包含当前正在运行的应用程序修订版(您在每次发布时递增的某个常量,或者只是来自 CFBundleVersion 的值)。当您打开您的应用程序时,请快速检查版本是否低于当前版本,然后覆盖 plist 并更新存储的版本,以便后续启动相同版本不会导致覆盖 plist。对于后续启动,如果修订值相同,请继续执行应用程序的其余部分
您还可以在代码中更改 plist 的名称。这样一个新的 plist 将被复制到文档文件夹中。您还可以添加代码来删除旧的:)