0

我正在制作一个应用程序,当您选择一个单元格时,您会被转到一个新的阅读视图。您点击的单元格对应于 Core Data 存储中的一个对象(通过NSFetchedResultsController),并且该对象被设置为article正在被连接到的视图的属性的值。

到达那里后,我会在用户阅读文章时移动用户在文章中的位置。(所以我改变了via的position属性)articlearticle.position = ...

但是,这在他们阅读时非常频繁地发生,通常是数百次,并且每次NSFetchedResultsController都将更改检测为更新,然后调用configureCell:,然后运行该单元格的一堆配置。由于此configureCell:方法被调用如此频繁(我只希望在他们返回表视图时调用它,因为这是唯一需要更新的时间)它会导致相当大的性能损失。

我不明白为什么它会调用它。我没有将数据保存NSManagedObjectContext到 Core Data 存储中,为什么它在乎呢?我只在调用时调用它viewWillDisappear,表示他们正在离开视图,可能会回到我想要的表视图!

基本上,我如何让它只configureCell:在需要/当我要求它将数据写入核心数据时才调用?它按原样调用了数百次。

4

1 回答 1

2

如果您不将 Core Data 对象的更改持久化到磁盘,这并不重要;对 Core Data 托管对象的更改是一个更改,因此 NSFetchedResultsController 承认它。

nil您可以通过将 NSFetchedResultsController 的委托设置为inviewWillDisappear:并将其设置回selfin来避免更新不可见的 tableview viewDidAppear:。另外,performFetch:在设置委托后添加一个。

“隐藏”的 NSFetchedResultsController 仍将接收对前台视图中的文章对象所做的所有更改,但将忽略它们,因为它没有委托。

返回文章列表视图时,它将再次拥有一个委托,并且能够对所有更改做出反应。

于 2013-07-09T00:37:59.550 回答