我正在撕扯我的头发试图让它发挥作用。
我已经查看了所有与 StackOverflow 相关的问题,但我无法完成最后一步!
我有NSFetchedResultsController
来自 Core Data 的显示数据。这一切都完美无缺。当那里有数据时,它会显示数据,一切都很好。
但是,我有一个异步更新,它从在线服务器中提取更多数据并将其保存到 Core Data。
我想要发生的是NSFetchedResultsController
拾取这些更新,然后显示它们(即将它们动画到当前显示的 tableView 上)。
我现在的设置是这样的......
感谢您对此的回复,我又尝试了一次尝试使其正常工作,但我仍然没有看到“实时”更新。
我想我应该试着解释一下我现在在哪里。我发现我的初始设置存在一些问题,我现在已经修复了这些问题,但仍然没有。
好的,那么首先是课程以及在哪里发生的事情......
[Class = AppDelegate]
[已 managedObjectContext(主上下文)加上持久存储等...]
[方法 = mergeChanges:notifiaction 这使用 GCD 回到主线程并执行 mergeChangesWithObjectblahblah]
[Class = NetworkDataClass]
[这有它自己的 ManagedObjectContext,它在初始化时被创建(在主线程中)]
[Method = saveContext
1. 添加 AppDelegate 作为 bgContext 的 didsavenotification 的观察者。
2. 保存上下文。
3. 删除 AppDelegate 作为观察者] (我知道观察正在工作,因为我在 AppDelegate 中有一个断点,当它保存时会停止。)
[方法 = getDataFromOnline(不是实际名称,但你明白了要点)
1. GCD 到 bg 线程.
2. 创建一个 NSURLRequest。
3. 同步运行请求。
4. 将数据放入类上下文中。
5.运行self saveContext]
[Class = tableViewClass]
[有tableView和NSFetchedResultsController也使用NSFetchedResultsControllerDelegate]
[Method = viewWillAppear
1.在我的网络类单例中运行getDataFromOnline方法]
我在那里有一些默认数据以确保它正在显示,当我进入 tableViewClass (上面详述)时,我可以以正确的排序顺序正确地看到数据以及正确的部分标题等......所以我可以清楚地看到fetchedresults 控制器正在工作。
我还可以看到(带有断点)它正确触发了 getDataFromOnline 方法。我可以看到数据进来了,我可以看到它是通过我的 ManagedObject 子类添加的,这一切都发生在 bgthread 中。
我还可以看到,当它保存 AppDelegate 时,它正在正确运行它的 mergeChanges 函数。
我唯一看不到的是正在使用新数据更新的表。
如果我 popToRootViewController 并返回我的表,那么所有新数据都在那里,所以我知道合并已经完成并且新数据已经添加和合并,但它只是在合并时没有出现。
有什么我想念的吗?
我需要在桌子上运行 reloadData 吗?我是否需要从 fetchedresultscontroller 触发“重新获取”或其他内容?
现在真的在为此苦苦挣扎。
感谢您提供的任何(更多)帮助。