[英]iPhone Core Data: NSFetchRequest with distinct properties and alphabet sections
我正在尝试创建一个NSFetchRequest,为UITableView生成结果。
它应该找到NSString属性的所有不同出现并将它们分成字母部分('A','B','C'等)
我在NSManagedObject类上设置了一个方法来返回属性的第一个字母:
- (NSString *)entrantFirstLetter
{
[self willAccessValueForKey:@"entrantFirstLetter"];
NSString *returnString = [self.entrant substringToIndex:1];
[self didAccessValueForKey:@"entrantFirstLetter"];
return returnString;
}
我将'sectionNameKeyPath'设置为@“entrantFirstLetter”,这非常有效
但是,我现在需要将returnsDistinctResults设置为YES
但是,如果设置了propertiesToFetch,则returnsDistinctResults才有效,所以
我将propertiesToFetch设置为“entrant”(我感兴趣的属性)
但是,为了使propertiesToFetch工作,resultType必须是NSDictionaryResultType,所以
我将resultType设置为NSDictionaryResultType
但是,这个resultsType意味着@“entrantFirstLetter”的'sectionNameKeyPath'不再有效。
那么,您认为答案是将'entrantFirstLetter'添加到propertiesToFetch中? 但由于它不是NSEntityDescription上的属性,我不能!
我想要做的就是将Core Data中的字符串列表排序为字母表部分,而不是重复。 我可以让每个部分都独立工作,但是让它们一起工作依赖于看似无穷无尽的依赖循环,我找不到让它全部工作的方法。
任何想法将不胜感激,
罗素。
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *entity = [NSEntityDescription entityForName:@"Project" inManagedObjectContext:managedObjectContext];
[fetchRequest setEntity:entity];
NSDictionary *properties = [entity propertiesByName];
NSArray *propertiesToFetch = [NSArray arrayWithObject:[properties objectForKey:@"entrant"]];
[fetchRequest setResultType:NSDictionaryResultType];
[fetchRequest setPropertiesToFetch:propertiesToFetch];
[fetchRequest setReturnsDistinctResults:YES];
NSSortDescriptor *entrantDescriptor = [[NSSortDescriptor alloc] initWithKey:@"entrant" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:entrantDescriptor]];
NSFetchedResultsController *aFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest
managedObjectContext:managedObjectContext sectionNameKeyPath:@"entrantFirstLetter" cacheName:nil];
您正在尝试复制NSFetchResultsController's
默认部分行为。
相反,只需将sectionNameKeyPath:
设置为entrant
,FRC将为您创建部分,而不需要您付出更多努力。
所以,最终这对NSFetchResultsController根本不起作用(这是在3.1.3 SDK下)。 我只是在loadView中执行了自己的NSFetchRequest,它根据首字母将所有进入者排序到数组中,同时存储有效的节标题名称。
也许Apple修复了4.x中描述的问题,但我从未需要此功能或更新此项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.