【发布时间】:2012-06-17 19:48:21
【问题描述】:
我正在努力让它发挥作用。
我查看了所有与 StackOverflow 相关的问题,但我无法完成最后一步!
我有一个 NSFetchedResultsController 显示来自 Core Data 的数据。这一切都完美无缺。当那里有数据时,它会显示数据,一切都很好。
但是,我有一个异步更新,它从在线服务器中提取更多数据并将其保存到 Core Data。
我想要发生的是NSFetchedResultsController 获取这些更新,然后显示它们(即将它们动画到当前显示的 tableView 上)。
我现在的设置是这样的......
感谢您对此的回复,我已经尝试过尝试使其正常工作,但我仍然没有看到“实时”更新。
我想我应该试着解释一下我现在在哪里。我在初始设置中发现了一些问题,现在我已经修复了这些问题,但仍然没有。
好的,那么首先是课程以及发生了什么......
[类 = AppDelegate]
[具有 managedObjectContext(主上下文)以及持久存储等...]
[方法=mergeChanges:通知
这使用 GCD 回到主线程并执行 mergeChangesWithObjectblahblah]
[类 = NetworkDataClass]
[这有自己的 ManagedObjectContext,在初始化时(在主线程中)创建]
[方法 = saveContext
1.添加AppDelegate作为bgContext的didsavenotification的观察者。
2. 保存上下文。
3. 删除 AppDelegate 作为观察者](我知道观察正在工作,因为我在 AppDelegate 中有一个断点,当它保存时会停止。)
[方法 = getDataFromOnline(不是实际名称,但您明白了要点)
1. GCD 到 bg 线程上。
2. 创建一个 NSURLRequest。
3. 同步运行请求。
4. 将数据放入类上下文中。
5.运行self saveContext]
[类 = tableViewClass]
【有tableView和NSFetchedResultsController也用NSFetchedResultsControllerDelegate】
[方法 = viewWillAppear
1. 在我的网络类单例中运行 getDataFromOnline 方法]
我在那里有一些默认数据以确保它被显示,当我进入 tableViewClass(上面详述)时,我可以以正确的排序顺序正确地查看数据,并带有正确的部分标题等......所以我可以清楚地看到 fetchedresultscontroller 正在工作。
我还可以看到(带有断点)它正确地触发了 getDataFromOnline 方法。我可以看到数据进来了,我可以看到它是通过我的 ManagedObject 子类添加的,这一切都发生在 bgthread 中。
我还可以看到,当它保存 AppDelegate 时,它正在正确运行它的 mergeChanges 函数。
我唯一看不到的是正在使用新数据更新的表格。
如果我 popToRootViewController 并返回到我的表,那么所有新数据都在那里,所以我知道合并已经完成,新数据已经添加和合并,但它只是在合并时没有出现。
我有什么遗漏吗?
我需要在桌子上运行 reloadData 吗?我是否需要从 fetchedresultscontroller 触发“重新获取”或其他内容?
现在真的很挣扎。
感谢您提供的任何(更多)帮助。
【问题讨论】:
-
我相信
NSFetchedResultsControllerDelegate方法实际上是更新监控需要实现的。另外 - 尝试使用视图控制器作为托管上下文通知的观察者。 -
好的,抱歉再更新一次。我刚刚发现正在调用委托方法并且它们在主线程上。但是 tableView 仍然没有发生任何事情。可能需要进一步研究。
-
啊!刚刚发现它(我认为) myTableView ivar 在通过委托方法时为零。嗯……
-
这意味着当使用 tableView 时,它没有连接到 xib(如果它是 IBOutlet),或者如果它是以编程方式构建的,它根本没有被初始化。
-
谢谢,但尝试将其作为属性,ivar 并且只是 viewWithTag:99 并且它总是为零?!将尝试删除并重新添加 tableView。谢谢
标签: ios core-data nsurlconnection nsfetchedresultscontroller nsmanagedobjectcontext