我有一个托管对象上下文,我添加了两个不同的SQLite商店。我使用Mananged Object Model中的Configurations将某些实体分配给一个商店,将其他实体分配给另一个实体。配置称为“UserDB”和“MainDB”。
在我尝试使用自动迁移之前,一切正常。在创建新的托管对象模型版本并向UserDB配置中的某个实体添加新属性后,在将旧版本存储(对于UserDB相关存储)添加到商店协调器时,我收到异常:'模型不包含配置'UserDB'。'我在Google上找不到此错误的匹配。有人在那里使用配置多个商店?任何人都知道我可能做错了什么?
堆栈如下所示:
objc_exception_throw
-[NSManagedObjectModel isConfiguration:compatibleWithStoreMetadata:]
-[NSStoreMigrationPolicy sourceModelForStoreAtURL:metadata:error:]
-[NSStoreMigrationPolicy(InternalMethods) _gatherDataAndPerformMigration:]
-[NSPersistentStoreCoordinator addPersistentStoreWithType:configuration:URL:options:error:]
-[MyAppDelegate persistentStoreCoordinator]
答案 0 :(得分:11)
这看起来像是迁移+配置的错误。在调用addPersistentStoreWithType时,我能够通过执行相同的运动并传递nil进行配置来解决问题。迁移发生,然后我可以创建一个新的持久性存储协调器,并使用正确的配置字符串参数再次添加存储。
这是我遇到的第二个与配置相关的错误。显然不是一个经过良好测试的功能。
答案 1 :(得分:0)
我遇到了同样的问题。事实模式相同,错误消息相同。然而,事实证明这是我自己错误的结果。
让我们说旧模型是Blah.xcdatamodel和新的Blah 2.xcdatamodel。在开始意识到我的错误并创建Blah 2之前,我已经开始对Blah进行更改。然后我使用我的版本控制系统(Git)恢复到旧Blah,然后重新创建了Blah 2.一切看起来都正确。但是我一定在恢复过程中做错了,因为当我想要仔细检查我当前项目文件夹中的Blah.xcdatamodel与项目文件夹中的Blah.xcdatamodel是否真的相同时,我曾用于构建以前版本的应用程序(幸运的是,我总是为每个发布的版本保留项目文件夹的压缩存档,因为我不完全信任版本控制系统),我发现它们实际上是不同的,尽管它们在XCode中看起来相同。例如,文件大小不同。
我将旧的Blah替换为我当前的项目文件夹,并且看起来一切都很完美,而不需要Ken所描述的解决方法。
我并不是说Ken肯定犯了类似的错误,但如果您确实遇到此消息,至少值得确认您要迁移的模型真的是用于创建相关数据的模型。