1

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

我有一个 NSFetchedResultsController ,它显示来自用户的信息,将信息添加到带有文本字段的 ModalViewController 中。用户看到一个 ModalView,他们在字段中输入一些单词,单击保存,这构成了 TableView 中的单个分段行,它实现了 NSFetchedResultsController 协议。

我现在想做的是:

  • 在其中一个文本字段上,能够根据该文本字段中提供的信息创建一个新部分。

我的 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(occasion)的关系,而createdDate是Occasion实体上的一个属性。

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

对此的任何帮助将不胜感激。

谢谢,

4

1 回答 1

2

确切的答案取决于应显示为节标题的内容以及应如何对节进行排序。

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

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

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

这是很笼统的,但我希望它能让你开始。

于 2013-10-21T20:48:03.307 回答