NSFetchedResultsController:在调用 -performFetch 之前,我是不是应该始终检查 fetchedObjects==nil?

Posted

技术标签:

【中文标题】NSFetchedResultsController:在调用 -performFetch 之前,我是不是应该始终检查 fetchedObjects==nil?【英文标题】:NSFetchedResultsController: should I always check fetchedObjects==nil before calling -performFetch?NSFetchedResultsController:在调用 -performFetch 之前,我是否应该始终检查 fetchedObjects==nil? 【发布时间】:2010-08-03 20:23:17 【问题描述】:

我将 NSFetchedResultsController 用于我的表格视图。我在控制器的 -viewDidLoad 方法中调用 -performFetch。

有时我的控制器被卸载然后重新加载,导致另一个调用 -viewDidLoad 和 -performFetch。我发现这导致了一个错误:“NSFetchedResultsController 错误:在控制器中找不到‘(null)’部分”。我发现像这样多次调用 -performFetch 会导致问题,并修改了我的 -viewDidLoad: 方法以执行以下操作:

if( fetchedResCtrlr.fetchedObjects == nil )

    NSError *error;
    if ( ![fetchedResCtrlr performFetch:&error] )  
       ...

作为 Core Data 的新手,我想知道这是否是正确的做法。我真的应该能够多次调用 -performFetch: 而不会出错吗?我应该在 -viewDidUnload: 中做些什么吗?

谢谢!

【问题讨论】:

【参考方案1】:

通常情况下,-viewDidUnload: 中的 NSFetchedResultsController 无需执行任何操作。此外,针对-fetchedObjects 检查 nil 通常是不值得的。听起来您的代码还有其他流程问题。多次调用-performFetch: 只会损害其自身的性能,而不会产生任何其他不良影响。

【讨论】:

以上是关于NSFetchedResultsController:在调用 -performFetch 之前,我是不是应该始终检查 fetchedObjects==nil?的主要内容,如果未能解决你的问题,请参考以下文章

在 Core Data 应用程序中调用 performFetch 后,是不是需要手动更新表视图?