0

我正在撕扯我的头发试图让它发挥作用。

我已经查看了所有与 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 触发“重新获取”或其他内容?

现在真的在为此苦苦挣扎。

感谢您提供的任何(更多)帮助。

4

1 回答 1

0

我会尝试给你一些建议并重定向到一些好的链接。

一、关于你的问题

我是否需要将 NSFetchedResultsController 添加到“监视”以进行合并?或者仅仅创造它就足以做到这一点?

正如Eimantas建议的那样,您可以简单地设置viewController您正在用作您的代表NSFetchedResultsController。为此,您需要实现NSFetchedResultsControllerDelegate类的方法。当上下文更新时,获取的控制器将自动响应更改。

NSManagedObjectContextObjectsDidChangeNotification 的观察者需要去哪里?是否可以在 AppDelegate 中(与 NSFetchedResultsController 所在的类不同)。

是否可以在 appDelegate 中注册并合并更改。确保您注册的通知来自您的上下文并在主线程中执行。

我还需要添加其他观察员吗?

不,NSFetchedResultsControllerDelegate很好。

我能做些什么来看看哪里出了问题?即 NSFetchedResultsControllerDelegate 是否应该运行我可以设置断点的任何方法?

首先,您可以查看核心数据通知是否包含您期望的对象。你可以简单地为它写一个日志。

我可以建议您阅读这个 SO question(由我编写)和Jody Hagins的相关答案。也许它可能有用。

NSFetchedResultsController 不显示来自不同上下文的更新

如果可能的话,你能更好地解释一下你的意思是什么

我有一个 NSFetchedResultsController 显示来自核心数据的数据。这一切都完美无缺。当那里有数据时,它会显示数据,一切都很好。

?

您是否在不同线程中执行核心数据插入?

希望有帮助。

于 2012-06-17T21:51:50.727 回答