我有两个模型部门和工人.部门与工人有很多关系(工人).Worker具有firstName字段.如何通过访问departmet.workers获得按firstName排序的工作人员列表?有没有办法在多对多关系中添加排序描述符?
Adr*_*nig 31
与Adrian Hosey的代码相比略有改进:
您也可以执行以下操作,而不是手动迭代所有工作人员:
-(NSArray *)sortedWorkers {
NSSortDescriptor *sortNameDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES] autorelease];
NSArray *sortDescriptors = [[[NSArray alloc] initWithObjects:sortNameDescriptor, nil] autorelease];
return [self.workers sortedArrayUsingDescriptors:sortDescriptors];
}
Run Code Online (Sandbox Code Playgroud)
可能与内部的迭代完全相同,但也许他们以某种方式使它更有效.打字肯定少了......
注意:以上仅适用于iOS 4.0+和OSX 10.6+.在旧版本中,您需要将最后一行替换为:
return [[self.workers allObjects] sortedArrayUsingDescriptors:sortDescriptors];
Run Code Online (Sandbox Code Playgroud)
Core Data中的To-many关系被建模为无序集.但是,您可以在包含排序描述符的Department实体上创建fetched属性,也可以在应用程序中对内存进行排序(NSArrayController
将通过设置其sortDescriptors
属性为您执行此操作).
对AdrianSchönig解决方案的微小改进:
到目前为止,有必要转换self.workers
为NSSet*
-(NSArray *)sortedWorkers {
NSSortDescriptor *sortNameDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES] autorelease];
NSArray *sortDescriptors = [[[NSArray alloc] initWithObjects:sortNameDescriptor, nil] autorelease];
return [(NSSet*)self.workers sortedArrayUsingDescriptors:sortDescriptors];
}
Run Code Online (Sandbox Code Playgroud)