iOS 上的 CoreData 轻量级迁移失败
Posted
技术标签:
【中文标题】iOS 上的 CoreData 轻量级迁移失败【英文标题】:CoreData lightweight migration failing on iOS 【发布时间】:2011-06-19 13:59:15 【问题描述】:我正在尝试将我的核心数据数据迁移到新版本。我所做的唯一更改是添加一个字段(NSString *sessionId)
所以我做了什么: 1.创建我的核心数据文件的版本2 2. 在这个文件中添加 sessionId。 3. 将版本 2 设置为默认值。 4.在Offer.m和.h中添加sessionId 5. 初始化persistentStoreCoordinator时添加选项:
NSDictionary *options = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithBool:YES], NSMigratePersistentStoresAutomaticallyOption,
[NSNumber numberWithBool:YES], NSInferMappingModelAutomaticallyOption, nil];
当我启动我的应用程序时,我认为它会得到我得到的更新模型:
未解决的错误错误 域=NSCocoaErrorDomain 代码=134130 “手术无法完成。 (可可错误 134130。)" 用户信息=0x7643200 URL=/用户/ei/库/应用程序 支持/iPhone Simulator/4.0.2/Applications/81B816AE-5CA0-46DB-83E7-6A765EBF9D05/Documents/Offers.sqlite, metadata=type = immutable dict, 计数 = 7,
紧随其后
reason=找不到源存储的模型
如果我在加载persistentStoreCoordinator 时没有设置选项,我会得到同样的错误 我错过了什么?
【问题讨论】:
你确定模拟器上安装的应用程序是旧版本的吗?确定改版后没有更新模型吗? 【参考方案1】:显然,如果您合并两个模型,然后尝试自动从一个模型迁移到另一个模型是行不通的。我们最终将它们分开。
【讨论】:
【参考方案2】:错误消息的含义与它所说的完全相同:它缺少用于保存数据库的 .xcdatamodel(或严格来说是 .mom)。我会尝试从旧版本中获取 .xcdatamodel 并查看是否有意外更改。
另一个问题是 Xcode 不擅长删除不再构建的文件,无论是在构建时还是在安装时(Xcode 允许进行“增量安装”以加快开发速度,至少在以前的版本中,从未删除文件)。它现在不是构建 MyApp.app/MyModel.mom,而是构建 MyApp.app/MyModel.momd/MyModel.mom,但旧的 MyModel.mom 可能会留下来混淆您用来加载模型的任何内容(通常它会抱怨关于无法合并模型,虽然......)。修复方法是使用 OTA/iPhone 配置实用程序/iTunes 对构建目录进行核对并安装应用程序(按照用户友好性的顺序),顺便说一下,为什么我告诉 Xcode 4 将构建产品粘贴在项目目录中(他们为什么改变它大概是因为人们不够聪明,不会提交它......)。
【讨论】:
它在那里,但我认为问题在于我将两个单独的模型合并为一个。 managedObjectModel_ = [[NSManagedObjectModel modelByMergingModels:[NSArray arrayWithObjects:managedObjectModelOffers_, managedObjectModelLogging_, nil]] 保留];我正在使用第三方 api 进行日志记录功能,这就是为什么我合并两个而不是在一个文件中定义它们。这可以通过某种方式解决吗? 这应该仍然有效,但一个简单的解决方法是为日志记录 API 使用不同的 PSC/MOC。 不幸的是,该应用程序已经在应用程序商店中上线,并且将 PSC/MOC 更改为单独的日志记录会导致崩溃:“用于打开商店的模型与使用的模型不兼容创建商店”以上是关于iOS 上的 CoreData 轻量级迁移失败的主要内容,如果未能解决你的问题,请参考以下文章