我正在尝试创建一个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];
答案 0 :(得分:1)
您正在尝试复制NSFetchResultsController's
默认部分行为。
相反,只需将sectionNameKeyPath:
设置为entrant
,FRC就会为您创建各个部分而不需要您付出更多努力。
答案 1 :(得分:1)
所以,最后这对NSFetchResultsController完全不起作用(这是在3.1.3 SDK下)。我只是在loadView中执行了我自己的NSFetchRequest,它根据首字母将所有进入者排序到数组中,同时存储有效的节标题名称。
也许Apple修复了4.x中描述的问题,但我从未需要此功能或更新此项目。