我正在尝试创建一个按部分的 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 是一个 transient 属性,如您所料,它返回 fullName 的第一个字母。 95% 的情况下,这都是完美的。
问题是结果 Controller 期望这两个“列表”(排序后的 fullName 列表和排序后的firstLetter 列表)完全匹配。如果我有两个像约翰和 jack 这样的联系人,我的全名列表每次都会将它们排序为 jack ,约翰,但我的第一个字母列表有时可能会将它们排序为约翰, jack ,因为它只按第一个字母排序,其余的都由运气决定。当这些列表不匹配时,我会得到一个空白的 tableView,其中包含 0 个项目。
我不太确定应该如何解决这个问题,但这非常令人沮丧。还有其他人遇到过这个吗?你们发现了什么?
最佳答案
我对“首字母列表”的含义感到困惑。
您不应该创建这样的列表。您只需实现 transient “firstLetter”属性的 getter,并使用获取结果 Controller 的样板方法来实现 TableView 方法。
参见this answer至 How to use the first character as a section name了解详情。
关于iphone-sdk-3.0 - 带有核心数据的首字母部分标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2450399/