NSFetchedResultsController多个限制和排序

时间:2013-05-03 04:42:55

标签: iphone ios core-data nsfetchedresultscontroller

嗨,我的核心数据中的表有类似的问题

+-----------------------+
|person                 |
+-----------------------+
|name                   |
|address                |
|birthDate              |
|gender                 |
+-----------------------+

在我的FetchedResultController中,我通过其性别MaleFemale将其提取到两个部分。 问题是我希望Male部分按其birthDate排序并且仅限制5行,在Female部分我希望按其name和无限制排序。< / p>

我可以在One FetchedResultController中完成,或者我需要2个FetchedResultController。或者如果有其他方法可以让我知道。

由于

1 个答案:

答案 0 :(得分:2)

如果您定义自己的排序方法,则可以使用一个NSFetchedResultController执行此操作。它会是这样的:

- (NSString *) sortBy
{ return (Male == self.gender ? self.birthDate : self.name); }

然后在控制器的配置中提供sortBy。请注意,正如@Martin R所指出的,您可能无法使用Objective-C方法进行排序;如果没有,则定义另一个属性'sortOrder'并在对象创建时计算它。

至于限制,不确定,但也许可以在tableView:numberOfRowsInSection:中实现Apple给出了这个例子:

- (NSInteger) tableView: (UITableView *) table 
  numberOfRowsInSection: (NSInteger) section
{
    id <NSFetchedResultsSectionInfo> sectionInfo = 
      [[<#Fetched results controller#> sections] objectAtIndex:section];
    return [sectionInfo numberOfObjects];
}

当该部分是“男性”部分时,也许你可以返回'3'。