【发布时间】:2014-04-28 18:44:32
【问题描述】:
我的应用程序使用两个UITableViewController 和它们各自的NSFetchedResultController 来显示其数据。它们保存在UITabBarController 中。
用户可以在 App 设置包中启用 iCloud。
当应用程序在禁用 iCloud 的情况下启动时,两个表都填充了数据并且可以完美运行。
应用立即向用户显示第一个控制器的数据。
如果用户进入应用设置并打开“使用 iCloud 开关”,当应用进入前台时,系统会询问他是否真的要与 iCloud 合并数据。如果他回答是,那么我:
1) 重置子上下文和父上下文,然后从协调器中删除现有存储。
2) 我在另一个上下文中重新加载存储,并使用 iCloud 选项使用 migratePersistentStore:toURL:options:withType:error 迁移它
3) 我删除了旧的本地文件
4) 我将启用 iCloud 的新持久存储添加到协调器。
到目前为止一切都很好,但是在迁移之后,如果我点击第二个选项卡,UITableViewController frc(在迁移之前工作得很好)会尝试刷新数据并且我得到这个错误:
无法从此 nsmanagedobjectcontext 的协调器访问对象的持久存储
当这个出现时,启用 iCloud 的持久存储出现在协调器 PersistentStores 数组中!它是唯一的。
如果我关闭应用程序并重新启动它,一切正常,启用 iCloud 的新数据库将作为应用程序商店加载,并且显示对象没有问题。
我该如何解决这个问题?
【问题讨论】:
-
听起来您至少在内存中保留了旧存储中的一个托管对象,然后在该存储消失后尝试使用它。您是否正在清理所有内存管理对象?
标签: ios objective-c core-data icloud