0

我在 Core Data 中有三个实体,排列如下:

类别 ->> 条目 ->> 字段

这三个实体在三个后续的表格视图中显示给用户。显示类别,用户可以点击一个类别,以便显示该类别中的所有条目,依此类推。

目前我正在获取所有类别一次CategorieViewController,排序并将它们保存在一个可变数组中。然后用户点击一个类别,我从数组中提取这个类别对象并将其传递给下一个视图控制器。该视图控制器然后从托管对象的 nsset 中提取该类别的所有条目,依此类推。

现在我想用 简化这个NSFetchedResultsController,但我不确定它是否会对我有帮助。据我所知,NSFRC 会在用户重命名条目时自动重新排序条目,对吗?截至目前,我在作为我的 tableview 数据源的数组中手动​​执行此操作。

此外,NSFRC 将如何简化对对象的访问。我注意到它有一种方法可以在给定的 indexpath 处返回托管对象。因此,例如,如果用户点击了第 3 个类别,那么在第 8 个条目上,我现在想在我的表格视图中显示该条目的第 5 个字段,我可以通过提供该对象的完整索引路径来访问所需的字段对象吗?

4

1 回答 1

0

据推测,您正在使用Category作为节标题。使用 FRC,您可以通过指定sectionNameKeyPath何时获取Entry实体来轻松完成此操作。

你是正确的,你可以得到条目

Entry *entry = [self.fetchedResultsController objectAtIndexPath:indexPath]; 

这些字段通过以下方式访问

entry.fields;

这是一个NSSet,一个无序的集合。如果您的Field实体包含排序属性,例如order,您可以使用

Field *field = [[entry.fields filteredSetUsingPredicate:
                 [NSPredicate predicateWithFormat:@"order = %@", fieldPosition]]
                   objectAtIndex:0];

如果需要,您可以像这样订购字段:

NSArray *orderedFields = [entry.fields sortedArrayUsingDescriptors:
     @[[NSSortDescriptor sortDescriptorWithKey:@"order" ascending:YES]]];
于 2013-02-09T11:22:36.677 回答