【发布时间】:2011-01-27 20:50:43
【问题描述】:
我正在尝试创建一个按部分的 tableView 排序的人员列表,其中第一个字母作为每个部分的标题 - 一个地址簿。我已经完成了所有工作,尽管排序顺序有点问题。这是我现在的做法:
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:[NSEntityDescription entityForName:@"Contact" inManagedObjectContext:context]];
NSSortDescriptor *fullName = [[NSSortDescriptor alloc] initWithKey:@"fullName" ascending:YES];
NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:fullName, nil];
[request setSortDescriptors:sortDescriptors];
[fullName release];
[sortDescriptors release];
NSError *error = nil;
[resultController release];
resultController = [[NSFetchedResultsController alloc] initWithFetchRequest:request managedObjectContext:context sectionNameKeyPath:@"firstLetter" cacheName:nil];
[resultController performFetch:&error];
[request release];
fullName 是一个标准属性,firstLetter 是一个瞬态属性,它返回 - 正如您所期望的 - fullName 的第一个字母。 95% 的时间,这都能完美运行。
问题是结果控制器期望这两个“列表”(排序后的 fullName 列表和排序后的 firstLetter 列表)完全匹配。如果我有 2 个联系人,如 John 和 Jack,我的 fullName 列表每次都会将它们排序为 Jack, John,但我的 firstLetter 列表有时可能会将它们排序为 John, Jack,因为它只按第一个字母排序,其余的则留给机会。当这些列表不匹配时,我会得到一个包含 0 个项目的空白 tableView。
我不确定我应该如何解决这个问题,但这非常令人沮丧。有没有其他人遇到过这个?你们发现了什么?
【问题讨论】: