Iphone 是否可以将核心数据排序为;“许多”;在提取请求期间,是多对多关系的一部分吗?

Iphone 是否可以将核心数据排序为;“许多”;在提取请求期间,是多对多关系的一部分吗?,iphone,core-data,nsmanagedobject,nsfetchrequest,nssortdescriptor,Iphone,Core Data,Nsmanagedobject,Nsfetchrequest,Nssortdescriptor,我使用核心数据来缓存相当数量的信息,并且在我的托管对象之间建立了一种对多关系。当然,我使用NSFetchRequest来获取该关系的单数方数组。但是,我使用关系的“多”端填充UITableView,我希望在提取数据时按字母顺序对其进行排序 如果我不清楚,这里有一个例子: “员工”和“老板”都是一对多关系中的NSManagedObject——每个老板都有很多员工,但员工只有一个老板。在检索到一组老板后,我推送一个包含员工列表的UITableViewController。我希望在NSFetch请求期

我使用核心数据来缓存相当数量的信息,并且在我的托管对象之间建立了一种对多关系。当然,我使用NSFetchRequest来获取该关系的单数方数组。但是,我使用关系的“多”端填充UITableView,我希望在提取数据时按字母顺序对其进行排序

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


“员工”和“老板”都是一对多关系中的NSManagedObject——每个老板都有很多员工,但员工只有一个老板。在检索到一组老板后,我推送一个包含员工列表的UITableViewController。我希望在NSFetch请求期间对员工进行预排序,以便更轻松地显示他们。这可能吗?我该怎么做呢?

为什么不从反面取呢?我假设您已经知道您感兴趣的老板的唯一id,因此可以构建如下谓词:

NSPredicate *pred = [NSPredicate predicateWithFormat:@"boss.bossId == %K", bossId];
NSFetchRequest *req = [[NSFetchRequest alloc] init];
[req setEntity:employeeEntity];
[req setPredicate:pred];
这样就可以提取任何具有匹配bossId的员工,然后可以向该提取请求添加排序描述符,以便按字母顺序排序

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

现在使用“排序”填充tableview

注意:
我有点困惑,为什么你不使用NSFetchedResultsController来实现这一点,因为它也会为你处理分区问题。

我还没有发现任何进行排序的方法,但是创建我需要的数据的新排序提取非常容易。也许我没有正确理解你,但我认为你答案的第一部分是我在我的问题中添加的评论中所说的。我认为你答案的第二部分会起作用,但我不想在当前视图中进行任何程序排序,由于该应用程序使用了大量数据,我不想在检索数据后花时间对数据进行排序。就NSFetchedResultsController而言,我对核心数据还不熟悉,所以我在发布问题时没有研究过这一点!不过谢谢你的提示-你说得对,NSFetchedResultsController是一个很好的工具。它已经在我的一个表视图中实现了。对不起,我会更明确一点。在我看来,您有两个选项,将目标实体反转为employees(您提到的第1部分),或者对数据进行一些内存排序。据我所知,没有其他“简单”的方法来完成排序,因为排序描述符应用于fetch中的目标实体。是的,这正是我得出的结论。在我的例子中,最干净的解决方案是第二次获取,使用boss作为属性来限制结果,因为我获取的是另一个表的结果,但是内存中的排序在其他情况下可能会更好。
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YESorNO];
NSArray *sorted = [entities sortedArrayUsingDescriptors:[NSArray arrayWithObject:sort]];