我有两个具有以下结构的表
MainCategory:
name position hasSubCategories
子类别:
name position display belongsToMainCategory
现在我想显示按主类别分组的所有子类别(其中display attribute = YES)。主要类别部分应按位置和子类别本身(在部分内)按其位置属性进行排序。 (顺便说一下,某个主要类别的名称相同...我的表格有更多属性,但它们与理解问题无关)。 但我的订单完全搞砸了。为什么?这是我的FetchedResultsController的代码:
NSError *error = nil;
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"SubCategory"];
NSSortDescriptor *mainCatPosition = [[NSSortDescriptor alloc]
initWithKey:@"belongsToMainCategory.position" ascending:YES];
NSSortDescriptor *subCatPosition = [[NSSortDescriptor alloc]
initWithKey:@"position" ascending:YES];
request.sortDescriptors = [NSArray arrayWithObjects:mainCatPosition,subCatPosition,nil];
request.predicate = [NSPredicate predicateWithFormat:@"display = %@", [NSNumber numberWithBool:YES]];
[self.db.managedObjectContext executeFetchRequest:request error:&error];
self.fetchedResultsController = [[NSFetchedResultsController alloc]initWithFetchRequest:request
managedObjectContext:self.budgetDatabase.managedObjectContext
sectionNameKeyPath:@"belongsToMainCategory.name"
cacheName:nil];
答案 0 :(得分:5)
用作获取结果控制器的sectionNameKeyPath:
参数的密钥路径必须
与第一个排序描述符或中使用的密钥相同,生成相同的相对排序。
获取的结果控制器首先根据第一个对所有获取的对象进行排序
排序描述符,然后根据sectionNameKeyPath
将对象分组为多个部分。因此,使用不同的键路径(如在您的情况下“belongsToMainCategory.position”与“belongsToMainCategory.name”)不起作用。
这甚至可能导致关于“乱序部分”的运行时错误。