【问题标题】:Core Data sort descriptors based on whether a relationship exists?Core Data 根据是否存在关系对描述符进行排序?
【发布时间】:2013-05-30 12:16:57
【问题描述】:

我有一个Wishlist 实体和一个Item 实体。它们具有双边对多的可选关系,即一个项目可以在 0 个或多个愿望清单中,而一个愿望清单可以包含 0 个或多个项目。

如果我选择wishlist.items,我会得到某个愿望清单中的所有项目。现在,我想做一个获取请求,而不是按愿望清单名称的字母顺序对我的所有愿望清单进行排序(就像现在这样),而是按这些愿望清单是否有项目。

它应该使用 2 个优先级对 Wishlists 进行排序:

1 - 按愿望清单中是否有项目排序(将没有的项目放在顶部)

2 - 如果绑定则按名称排序(如果两者都有/没有项目)

所以,如果我有 3 个愿望清单,一个有 2 个名为“apple”的项目,另一个没有名为“test”的项目,另一个有 3 个名为“android”的项目,它应该按如下方式对它们进行排序,从上到下:

 1. test
 2. android
 3. apple

如何使用排序描述符来实现这一点?我的谓词是 nil,因为我正在获取 Core Data 中的所有愿望清单。

【问题讨论】:

    标签: ios objective-c sorting core-data nssortdescriptor


    【解决方案1】:

    解决这个问题的一种方法是这样的:

    获取两组心愿单(一组有物品,一组没有)

    NSPredicate *withoutItems = [NSPredicate predicateWithFormat:@"items.@count == 0"];
    NSPredicate *withItems    = [NSPredicate predicateWithFormat:@"items.@count != 0"];
    

    每个都应该在获取请求中具有相同的排序描述符:

    NSSortDescriptor *byName  = [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES];
    

    现在一旦你执行了请求,你应该有两个(排序的)数组:

    // Provided that you have a managedObjectContext
    // and your fetch requests set up 
    NSArray *emptyLists    = [moc executeFetchRequest:requestForEmpty error:&error];
    NSArray *nonEmptyLists = [moc executeFetchRequest:requestForNonEmpty error:&error];
    

    最后,如果您需要某种统一的数据源,您可以将它们组合起来:

    NSArray *allSorted = [emptyLists arrayByAddingObjectsFromArray:nonEmptyLists];
    

    【讨论】:

    • 这看起来不错,但是如何将allSorted 数组放入我的fetchedResultsController 以便它可以更新tableView?它只需要一个 fetch 请求作为初始化。
    • 嗯抱歉不知道您使用的是fetchedResultsController。虽然已经在研究一个新想法......
    • 我使用它是因为这样更新我的表要容易得多,我只是设置了我想要的获取请求,它会自动更新tableView。期待看到你能想出什么!
    • 好的,我已经尝试了一些方法,但恐怕在您的情况下,最好的选择是放弃fetchedResultsController。话虽如此,如果有人能提出一个体面的解决方案,我也会很高兴知道它。我将保留答案,因为该解决方案适用于非 fetchedResultsController 场景。
    • 我不能放弃它,对不起。这对我的设计至关重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    • 2016-04-07
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    相关资源
    最近更新 更多