核心数据,对一对多子对象进行排序

时间:2010-03-26 15:11:57

标签: iphone objective-c xcode core-data

所以,假设我有一个父母子女的存储,父母与孩子(parent.children)有一对多的关系,他们都有名字。现在,在父母的初始提取中,我可以指定排序描述符以按名字顺序将它们恢复,但我如何按顺序请求子项?如果我做了一个[parent.children allObjects]它只会让它们混淆,我每次都必须对事实进行排序。

谢谢, 萨姆

2 个答案:

答案 0 :(得分:16)

如果您只想使用NSArray而不是NSFetchedResultsController,还有另一种方法:

NSSortDescriptor *alphaSort = [NSSortDescriptor sortDescriptorWithKey:@"firstName" ascending:YES];
NSArray *children = [[parent.children allObjects] sortedArrayUsingDescriptors:[NSArray arrayWithObject:alphaSort]];

答案 1 :(得分:11)

山姆,

如果我正确地阅读了您的问题,您需要设置一个提取,返回特定父级子项的排序列表。为此,我将为“children”实体设置一个提取,然后使用谓词来限制结果:

NSFetchRequest *request = [[[NSFetchRequest alloc] init] autorelease];
[request setEntity:[NSEntityDescription entityForName:@"children" inManagedObjectContext:moc]];
[request setSortDescriptors:[NSArray initWithObject:[[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES]];
[request setPredicate:[NSPredicate predicateWithFormat:@"(parent == %@)", parent]];

显然,您的实体和属性名称可能不同。在最后一行中,父变量应该是对其所需子项的父级的NSManagedObject实例的引用。