iphone - 是否可以在获取请求期间让 Core Data 对一对多关系的 "many"部分进行排序?

标签 iphone core-data nsmanagedobject nsfetchrequest nssortdescriptor

我正在使用 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/

相关文章:

ios - 分组 TableView - 新条目需要新部分。使用核心数据

ios - NSFetchedResultsController didChangeObject 带有过滤 NSPredicate

swift - 有没有办法在 Core Data 中使用带有参数的计算属性?

iphone - 在 iOS 7 中的另一个 ViewController 上显示清晰的彩色 ViewController

iphone - iPhone 的闪存有多少个编程/删除周期?

iphone - 单元测试找不到核心数据模型文件

iphone - 导航到 SplitViewController

ios - 如何在今天的扩展中访问 CoreData 模型(iOS)

ios - UITableView 在快速滚动时崩溃

ios - 获取排序记录的问题 (CoreData)