繁体   English   中英

iPhone核心数据:具有不同属性和字母部分的NSFetchRequest

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM