Core Data、iCloud 和两个持久性存储失败
Posted
技术标签:
【中文标题】Core Data、iCloud 和两个持久性存储失败【英文标题】:Core Data, iCloud and two persistence stores fail 【发布时间】:2013-01-26 09:27:44 【问题描述】:我有一个带有单个持久存储的现有数据模型,一切都很好。
现在,在 WWDC 2012 视频“使用 iCloud 与核心数据”(#227)之后,我在我的模型中定义了两个配置,“云”和“本地”,同时保持原来的“默认”。我已经将我的实体分为“云”和“本地”。在我的代码中,我只添加了两个对应的持久存储:
NSDictionary *options = @NSMigratePersistentStoresAutomaticallyOption: @YES,
NSInferMappingModelAutomaticallyOption: @YES;
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:@"Cloud"
URL:[self cloudPersistentStoreURL]
options:options
error:&error])
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
if (![__persistentStoreCoordinator addPersistentStoreWithType:NSSQLiteStoreType
configuration:@"Local"
URL:[self localPersistentStoreURL]
options:options
error:&error])
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
这些添加得很好。后来,在运行应用程序时,我尝试正常保存一些初始试用数据,抛出以下异常:
NSUnderlyingException=无法解决如何将对象分配给商店; 某些对象可能已分配给商店;使用 [[托管对象 objectID] persistentStore] 找出现在在哪里;采用 [managedObjectContext assignObject:toStore:] 把事情理顺
我在 Google 上搜索了其中的一部分,没有任何结果,Apple 的故障排除核心数据文档似乎没有讨论这个问题。我不知道是什么原因造成的,也不知道去哪里找。有什么想法吗?
【问题讨论】:
【参考方案1】:确保您没有从一家商店到另一家商店的关系。相关实体必须位于同一配置中。
例如,您将实体Book
配置为存储在Cloud
中,并将Author
配置为存储在Local
中。两者都是相关的。
当您现在将 Author
分配给 Book
并保存时,CoreData 无法处理该关系并会引发您看到的错误。
【讨论】:
啊我也想知道这个 - WWDC 视频没有任何关系。我确实有跨越商店的关系。仅与公共商店中的实体相关的实体会引发异常,但这无关紧要。以上是关于Core Data、iCloud 和两个持久性存储失败的主要内容,如果未能解决你的问题,请参考以下文章
Swift - 向 Core Data 添加启用 iCloud 的持久存储
在 iOS 7 中禁用 Core Data 中的 iCloud(也就是将持久存储文件迁移到本地)
iOS7 Core Data 和 iCloud 作为备份。用户的观点