如何在使用多个时使用正确的fetchedResultsController

时间:2013-09-12 16:36:45

标签: ios uitableview core-data nsfetchedresultscontroller

我有两个UIViewController的{​​{1}}。这两个表是从不同的实体填充的,所以我使用了两个获取的结果控制器。在使用UITableViewDelegate / Datasource方法时,如何指定使用哪个UITableViews

How to filter NSFetchedResultsController (CoreData) with UISearchDisplayController/UISearchBar

上面的链接基本上是介绍了如何实现两个FRC,但我已经足够新了以至于我不确定他的方法如何工作。

fetchedResultsController

有人可以为我拼写这个吗?特别是- (NSFetchedResultsController *)fetchedResultsControllerForTableView:(UITableView *)tableView { return tableView == self.tableView ? self.fetchedResultsController : self.searchFetchedResultsController; } 行。 提前致谢!

1 个答案:

答案 0 :(得分:2)

您可能需要了解两件事。

首先,该声明包括一个三元运算符('?')。三元运算符用于方便编程,并且一行与以下内容完全相同:

if(tableView == self.tableView){
    return self.fetchedResultsController;
} else {
    return self.searchFetchedResultsController;
}

第二件事是理解回调。您在UIViewController中控制两个tableView,它们各自使用自己的NSFetchedResultsController。当系统调用fetchedResultsControllerForTableView回调时,您必须为给定的表返回正确的fetchedResultsController。

所以fetchedResultsControllerForTablView函数通常看起来像这样:

- (NSFetchedResultsController *)fetchedResultsControllerForTableView:(UITableView *)tableView
{
    if(tableView == self.tableView1){
        return self.fetchedResultsController1;
    } else if (tableView == self.tableView2){
        return self.fetchedResultsController2;
    } else if ...

表示n个表。

编辑: 系统不会调用此函数,但它是在用户类中调用的辅助方法。 (我只是重新阅读了问题中的链接)。但这个想法基本上是一样的。

让我们以numberOfSectionsInTableView函数为例。这是由iOS系统调用的,因此它知道要放入tableView中的部分。系统将有问题的TableView传递给函数。那么,部分的数量是基于fetchedResultsController中的信息,但是我们使用了哪个fetchedResultsController?辅助函数获取表(原始传递给numberOfSectionsInTableView函数)并确定要使用的fetchedResultsController。然后我们用它来回答问题"有多少部分?"