gpt4 book ai didi

ios - 应用更新后的大麻烦。 CoreData迁移错误

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:20:05 26 4
gpt4 key购买 nike

今天早上我们的 iPhone 应用程序遇到了大麻烦。我们甚至不得不将它下架。

关键是我们对 xcdatamodel 做了真正的小改动。我们认为更新过程会自动以正确的方式进行交换,直到我们发现存在诸如 CoreData 迁移之类的东西。

我们正在使用 UIManagedDocument 连接到持久存储。

如何将这个文件与新文件交换?在开发过程中,我们只是从设备上卸载了整个应用程序,然后重新安装,一切正常。我们如何通过更新在应用商店中模拟此过程?

更新

我尝试这样设置迁移选项

_database = [[UIIManagedDocument alloc] init];
NSMutableDictionary *options = [[NSMutableDictionary alloc] init];
[options setObject:[NSNumber numberWithBool:YES] forKey:NSMigratePersistentStoresAutomaticallyOption],

_database.persistentStoreOptions = options;

但应用程序仍然崩溃

** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'This NSPersistentStoreCoordinator has no persistent stores. It cannot perform a save operation.'


最佳答案

关键是管理您的 xcdatamodel 文件的多个版本。一个版本是当前版本,用于打开根据旧版本创建的数据存储。这样做时,您使用迁移映射从一种模型转换为另一种模型。这都解释了here .

关于您的问题:您如何模拟更新过程,实际上您不需要做任何特别的事情:

  1. 安装旧版本;

  2. 用一些数据填充它的数据存储;

  3. 通过 Xcode 在旧版本之上安装新版本;

较新的版本将具有较新的数据模型;当安装在旧版本之上时,它将找到旧数据存储并且必须尝试迁移它。这正是通过 App Store 进行更新时发生的情况:应用程序二进制文件被替换,但其沙箱数据保持不变,因此新二进制文件会发现它已经存在。

希望这对您有所帮助。

编辑:

您的代码已缩短,所以我不确定您是否还没有,但您可以尝试:

NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];

另请查看 this post .

在另一个硬币上,自动迁移并不总是有效,这取决于你对模型所做的更改;当它不起作用时,您需要指定一个自定义迁移模型。 This is a very informative post关于这个话题。

关于ios - 应用更新后的大麻烦。 CoreData迁移错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12261234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com