NSFetchedResultsController管理的tableview结构有多深?

时间:2013-02-04 22:48:33

标签: ios uitableview nsfetchedresultscontroller

我在核心数据中有三个权利,其排列如下:

类别 - >>输入 - >>字段

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

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

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

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

1 个答案:

答案 0 :(得分: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]]];