2

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

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

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

4

1 回答 1

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]];

现在使用“排序”填充您的表格视图。

注意: 我对您为什么不为此使用 NSFetchedResultsController 感到有些困惑,因为它也会为您处理切片。

于 2010-10-25T19:11:45.693 回答