如何使用NSFetchedResultsController实现节

时间:2013-10-21 16:15:38

标签: ios core-data nsfetchedresultscontroller nsfetchrequest sections

我已经对多个类似的问题和网站进行了一些阅读,我对此无法理解。

我有一个NSFetchedResultsController,它显示来自用户的信息,该信息将信息添加到带有文本字段的ModalViewController中。向用户呈现ModalView,他们在字段中添加一些单词,单击“保存”,组成TableView中单个分段的表行,实现NSFetchedResultsController协议。

我现在想做的是:

  • 在其中一个文本字段中,可以使用该textField中提供的信息创建新部分。

我的fetchrequest是:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    NSEntityDescription *entity = [NSEntityDescription entityForName:@"Transaction" inManagedObjectContext:managedObjectContext];
    [fetchRequest setEntity:entity];

    NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"whoBy.name" ascending:YES selector:@selector(localizedCaseInsensitiveCompare:)];
    [fetchRequest setSortDescriptors:[NSArray arrayWithObject:sort]];
    [fetchRequest setFetchBatchSize:20];

    NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:nil];
    self.fetchedResultsController = theFetchedResultsController;
    _fetchedResultsController.delegate = self;
    return _fetchedResultsController; 

我想要显示的属性是occasion.date,这意味着它是从Transaction实体到Occasion Entity(场合)的关系,createdDate是Occasion实体上的属性。

我可以看到sectionNameKeyPath:nil需要更新,但是我应该更新它,还需要更改任何数据源方法,标题等吗?

对此的任何帮助都将受到大力赞赏。

谢谢,

1 个答案:

答案 0 :(得分:2)

准确答案取决于应显示为部分标题的内容以及如何显示 部分应该排序。

但通常,您必须向实体添加属性,然后将其用作sectionNameKeyPath参数。此外,您还必须添加第一个排序描述符 使用相同的键(这个条件可以略微放松)。

例如,如果您只是将字符串属性sectionName添加到实体并使用 作为sectionNameKeyPath和第一个排序描述符键,然后是所有对象 具有sectionName的相同值将被分组为一个部分, 这些部分将按sectionName排序。 剩余的 排序描述符用于对每个部分中的对象进行排序。

另一个例子是用字符串属性定义一个单独的实体“Section” “title”和整数属性“index”,从中添加一对一的关系“section” “交易”到“部分”,并使用section.index作为sectionNameKeyPath。 同样,具有相同部分的所有对象被组合在一起,但是部分是 现在按section.index的值排序,您可以修改 tableView:titleForHeaderInSection:以便标题显示在该部分中 标题而不是索引

这很普遍,但我希望它能让你开始。