【发布时间】:2013-06-29 08:42:59
【问题描述】:
我有一个这样的核心数据模型:
ParentObject <--->> ChildObject
ParentObject 和 ChildObject 都有一个属性 levelNumber 为:
typedef enum {
Primary,
Secondary,
Tertiary
} LevelNumber;
我还有一种方法可以在 ParentObject 和 childObject 中将级别编号从 int 转换为 string:
-(void) levelString
{
switch(self.levelNumber)
{
case Primary: return @"Primary";
case Secondary: return @"Secondary";
case Tertiary: return @"Tertiary";
default: return @"Error";
}
}
现在我在一个列出ParentObject 的tableview 中有一个FetchedResultsController。
我想在部分名称中获得的是:
-
如果
ParentObject是Secondary或Tertiary,则显示该部分 命名为Secondary或Tertiary。 -
如果
ParentObject是Primary,但任何ChildObjects是Secondary或Tertiary,则将部分名称显示为Secondary或Tertiary。李> - 如果
ParentObject和所有ChildObjects都是Primary,则显示部分名称为Primary
如果我只需要查看ParentObject 的levelNumber 就很简单了,如下所示-
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"ParentObject"];
NSSortDescriptor *levelNumSD = [NSSortDescriptor sortDescriptorWithKey:@"levelNumber" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObjects:levelNumSD, nil];
self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:myContext
sectionNameKeyPath:@"levelString"
cacheName:nil];
我了解 FRC 中的限制是 SortDescriptor 的结果应以与希望显示的顺序相同的顺序返回结果。
我怎样才能在这里合并ChildObject 检查。它会是一种新的 SortDescriptor,还是别的什么?
【问题讨论】:
-
IMO 在您的父对象模型中有一个单独的属性
sectionLevelNumber。 -
@Bala 如果我理解正确,属性
sectionLevelNumber本身不会存储任何值,但它的getter 实际上会查看ParentObject的levelNumber以及所有ChildObjects并查看返回哪个级别。这将是一个问题,因为在 FRC 的第一次提取中,它希望将值存储在数据库中,而不是在运行时派生。 -
蒙迪已经解释清楚了
标签: ios core-data nssortdescriptor nsfetchedresultscontroller