gpt4 book ai didi

ios - Core Data 根据关系是否存在对描述符进行排序?

转载 作者:行者123 更新时间:2023-11-29 03:53:05 25 4
gpt4 key购买 nike

我有一个 Wishlist 实体和一个 Item 实体。它们具有双边对多可选关系,即一个项目可以位于 0 个或多个愿望 list 中,并且一个愿望 list 可以包含 0 个或多个项目。

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

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

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

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

因此,如果我有 3 个愿望 list ,其中一个有 2 个名为“apple”的项目,另一个没有名为“test”的项目,另一个有 3 个名为“android”的项目,则应按如下方式从上到下对它们进行排序:

 1. test
2. android
3. apple

如何使用排序描述符实现此目的?我的谓词是nil,因为我正在获取核心数据中的所有愿望 list 。

最佳答案

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

获取两套愿望 list (一套有商品,一套没有)

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

关于ios - Core Data 根据关系是否存在对描述符进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16835927/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com