许多关系使用NSFetchedResultsController
我试图在我的应用程序中使用NSFetchedResultsController
,但在排序数据时遇到问题。 尝试使用实体中两级关系对结果进行排序时出现以下错误:
*由于未捕获异常'NSInvalidArgumentException'而终止应用程序,原因:'这里不允许使用多对多密钥'
我的数据模型是这样设置的:
项目<< --->类别<--- >> SortOrder << ---> Store
换句话说:每个项目都属于一个类别。 对于包含特定类别的每个商店,类别可以有不同的排序顺序。
因此,我正在创建一个提取请求来查找特定商店的所有商品,并希望将类别名称作为部分显示结果,并按排序顺序进行排序。
当我执行获取(最后一行)时,我得到了上述错误。
NSManagedObjectContext* context = [appDelegate managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(status != %d) AND (ANY category.sort.include == YES) AND (ANY category.sort.store == %@)", ItemStatusDefault, store];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Item" inManagedObjectContext:context];
[fetchRequest setEntity:entity];
[fetchRequest setPredicate:predicate];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"category.sort.order" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:sortDescriptor, nil];
[fetchRequest setSortDescriptors:sortDescriptors];
[sortDescriptors release];
[sortDescriptor release];
self.resultsController = [[NSFetchedResultsController alloc]
initWithFetchRequest:fetchRequest
managedObjectContext:context
sectionNameKeyPath:@"category.name"
cacheName:nil];
[fetchRequest release];
NSError *error;
BOOL success = [self.resultsController performFetch:&error];
如果我将排序更改为类别名称,它就可以工作。
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"category.name" ascending:YES];
我怎样才能让NSSortDescriptor
在排序顺序上进行排序?
更新:所以这似乎是不可能的。 我建议创建一个瞬态属性并对其进行排序,但Apple文档明确指出
您无法使用基于瞬态属性的谓词进行获取
我的结论是,我不能使用NSFetchedResultsController开箱即用。 我需要访问NSFetchResultsController给我并在内存中排序的对象数组,或者设置我自己的读取请求并跳过NSFetchedResultsController。
iOS 5提供现在有序的关系
https://developer.apple.com/LIBRARY/ios/releasenotes/DataManagement/RN-CoreData/index.html
更新:链接已更新
参考:“OS X v10.7和iOS 5.0的核心数据发行说明”
链接地址: http://www.djcxy.com/p/36139.html