0

I have a UIViewController with two UITableViews. The two tables are populated from different entities so I am using two fetched results controllers. When it comes to using the UITableViewDelegate/Datasource methods how do I designate which fetchedResultsController to use?

How to filter NSFetchedResultsController (CoreData) with UISearchDisplayController/UISearchBar

The link above basically walks one through how to implement two FRC's but I'm new enough that I'm not sure how his method below works.

- (NSFetchedResultsController *)fetchedResultsControllerForTableView:(UITableView *)tableView
{
    return tableView == self.tableView ? self.fetchedResultsController : self.searchFetchedResultsController;
}

Could someone spell this out for me? Specifically the return tableView == .... line. Thanks in advance!

4

1 回答 1

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 传递给函数。好吧,section的数量是基于fetchedResultsController中的信息,但是我们使用哪个fetchedResultsController呢?辅助函数获取表(最初传递给 numberOfSectionsInTableView 函数)并确定要使用哪个 fetchedResultsController。然后我们用它来回答“有多少部分?”这个问题。

于 2013-09-12T16:47:13.877 回答