我正在使用 Core Data 缓存大量信息,并且在托管对象之间设置了一对多关系。当然,我使用 NSFetchRequest 来获取该关系的单边数组。但是,我使用关系的“多”方填充 UITableView,并且我希望在提取数据时按字母顺序排序。
如果我没说清楚,这里有一个例子:
“employee”和“boss”都是一对多关系中的NSManagedObjects - 每个老板有很多员工,但员工只有一个老板。检索老板数组后,我推送一个包含员工列表的 UITableViewController。我希望在 NSFetchRequest 期间对员工进行预排序,以便更轻松地显示它们。这可能吗?我该如何去做?
最佳答案
为什么不从反向获取?我假设您已经知道您感兴趣的老板的唯一 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]];
现在使用“已排序”填充您的表格 View 。
注意: 我有点困惑为什么你不使用 NSFetchedResultsController 来实现这一点,因为它也会为你处理分区。
关于iphone - 是否可以在获取请求期间让 Core Data 对一对多关系的 "many"部分进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4003659/