我正在开发一个使用NSFetchedResultsController的核心数据应用程序。我按字符串fname排序结果。我添加了一个排序描述符,但结果未排序,并在获取时抛出codedata错误。
NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Contact"];
[request setIncludesPendingChanges:NO];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name.fname.string" ascending:YES];
[request setSortDescriptors:@[sortDescriptor]];
_fetchController = [[NSFetchedResultsController alloc] initWithFetchRequest:request
managedObjectContext:[BCSCoreDataInterface sharedInstance].mainQueueContext
sectionNameKeyPath :@"name.fname.stringGroupByFirstInitial" cacheName :nil];
self.fetchController.delegate = self;
NSError *error = nil;
if (![self.fetchController performFetch:&error]) {
// error handling
}
答案 0 :(得分:0)
尝试使用
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name.fname.string" ascending:YES selector:@selector(caseInsensitiveCompare:)];
修改强>
我可以看到您将排序描述符设置为“name.fname.string”,但是传递给结果控制器的第一个排序描述符将对该节进行排序,并且您的排序描述符与sectionNameKeyPath不匹配。 因此,您需要添加第一个排序描述符来对部分进行排序,然后添加第二个排序描述符以对每个部分中的行进行排序。所以试试这个:
NSSortDescriptor *sectionSort = [[NSSortDescriptor alloc] initWithKey@"name.fname.stringGroupByFirstInitial" ascending:YES];
NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name.fname.string" ascending:YES];
[request setSortDescriptors: @[sectionSort, sortDescriptor]];
祝你好运。