我的应用使用两个UITableViewController
及其各自的NSFetchedResultController
来显示其数据。它们保存在UITabBarController
内。
用户可以在App设置包中启用iCloud。
当应用程序以iCloud禁用启动时,这两个表都会填充数据并且工作正常。
该应用程序立即向用户显示第一个控制器的数据。
如果用户进入应用程序设置并打开"使用iCloud开关",当应用程序进入前台时,系统会询问他是否真的想要将数据与iCloud合并。如果他回答是,那么我:
1)重置子和父上下文,我从协调器中删除现有的商店。
2)我在另一个上下文中重新加载商店,然后使用migratePersistentStore将其迁移到iCloud选项:toURL:options:withType:error
3)我删除旧的本地文件
4)我将新启用iCloud的持久存储添加到协调器。
到目前为止一切都很好但是在迁移之后如果我点击第二个选项卡,UITableViewController frc(在迁移之前工作正常)会尝试刷新数据并且我收到此错误:
无法从此nsmanagedobjectcontext协调员访问对象的持久存储
当这个出现时,启用iCloud的持久存储会出现在协调器PersistentStores数组中!这是唯一正确的。
如果我关闭应用程序并重新启动它一切正常,新的启用iCloud的数据库将作为应用商店加载,并且显示对象没有问题。
如何解决此问题?
答案 0 :(得分:0)
正如所建议的那样,问题是我在旧商店附近管理对象。我修复了在迁移完成后发布通知然后我设置为nil所有NSFetchedResultsController,我重新创建它们并且我要求他们执行他们的请求。现在一切都按预期工作了。