代码之家  ›  专栏  ›  技术社区  ›  JoBu1324

在获取请求期间,是否可以让核心数据对多对多关系的“多”部分进行排序?

  •  2
  • JoBu1324  · 技术社区  · 14 年前

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

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

    1 回复  |  直到 14 年前
        1
  •  2
  •   ImHuntingWabbits    14 年前

    为什么不从反面取呢?我假设您已经知道您感兴趣的老板的唯一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]];
    

    现在使用“sorted”填充tableview。

    我有点搞不懂你为什么不使用NSFetchedResultsController,因为它会帮你处理分区。

    推荐文章