在获取请求期间,是否可以让Core Data对To-Many关系的“很多”部分进行排序?

时间:2010-10-23 11:07:00

标签: iphone core-data nsmanagedobject nsfetchrequest nssortdescriptor

我正在使用Core Data来缓存大量信息,并且我在托管对象中设置了To-Many关系。当然,我使用NSFetchRequest来获取该关系的奇异边的数组。但是,我使用关系的“多”方面填充UITableView,并且我希望在我提取数据时按字母顺序对其进行排序。

如果我不清楚,这是一个例子:

“员工”和“老板”都是To-Many关系中的NSManagedObjects - 每个老板都有很多员工,但员工只有一个老板。检索一个老板数组后,我推送一个包含员工列表的UITableViewController。我希望在NSFetchRequest期间对员工进行预先排序,以便更容易地显示它们。这是可能的,我将如何去做呢?

1 个答案:

答案 0 :(得分:2)

为什么不从反向获取?我假设你已经知道你感兴趣的老板的唯一ID,所以你可以建立一个像这样的谓词:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"boss.bossId == %K", bossId];
NSFetchRequest *req = [[NSFetchRequest alloc] init];
[req setEntity:employeeEntity];
[req setPredicate:pred];

这应该取出具有匹配bossId的任何员工,然后您可以向该获取请求添加排序描述符以按字母顺序排序。

或者,您可以获取在当前实现中提取的NSManagedObject实例数组,并使用排序描述符对其进行排序(假设您的员工姓名位于属性“name”):

NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YESorNO];
NSArray *sorted = [entities sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];

现在使用“已排序”填充您的tableview。

注意: 我对你为什么不使用NSFetchedResultsController感到有点困惑,因为它也会照顾你的部分。