在更新从CoreData崩溃获取的数据源时滚动tableview

时间:2015-06-11 14:51:05

标签: ios iphone uitableview core-data

以下是我的背景信息:

当我启动我的应用程序时,我从CoreData获取本地数据并用它填充tableview。同时我向我的webservice发送异步请求以获取我的tableview的新内容。 一旦请求发送给我一个响应,我就删除当前NSManagedObjects的所有实例,并用我得到的新数据创建新的实例。然后我将tableview的数据源替换为新的NSManagedObjectContexts实例的数组。

我的问题:

我收到错误:如果我在请求结束时滚动我的tableview并触发删除/创建tableview的数据源,则CoreData无法解决... 的错误。< / p>

我知道出现此问题是因为我正在尝试访问旧的NSManagedObject实例而不再存在,因为它在doc:Apple doc中有解释。但我不知道在我的案例中最好的做法是什么。

我不希望在我的请求完成之前阻止用户,但是如果他在请求没有完成时访问“旧”数据,我必须防止任何错误(例如:如果用户点击一个单元格我会怎么样?将NSManagedObject的实例传递给另一个viewcontroller,但是当请求完成时,该对象不再存在?)

我将不胜感激任何帮助!

1 个答案:

答案 0 :(得分:1)

我强烈建议您使用NSFetchedResultsController,因为它的唯一目的是:

  

使用获取的结果控制器有效地管理从Core Data获取请求返回的结果,以便为UITableView对象提供数据。

使用获取的结果控制器时,处理插入,删除,更新等核心数据事件要容易得多。

你说你的桌面视图中有三个部分?这没问题,NSFetchedResultsController可以处理所有这些问题。

看看this。 Apple提供了一套关于如何配置和使用NSFetchedResultsController的非常好的说明。