gpt4 book ai didi

ios - 核心数据 : What should I use as a Sort Descriptor with ordered set (ios5) in a many to many relationship

转载 作者:技术小花猫 更新时间:2023-10-29 11:01:09 25 4
gpt4 key购买 nike

enter image description here - 我有一个 Item 实体和一个 Tag 实体。- 项目可以有多个标签,标签可以链接到多个项目(多对多关系)。- 双向关系都是“有序关系”(在 IOS5 中使用有序关系)。

我想获取给定项目的所有子标签

我使用以下获取请求:

NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"Item"];

// Fetch all items that have a given tag
Tag* myTag = ....;
request.predicate = [NSPredicate predicateWithFormat:@"ANY tag == %@", myTag];

// This is my attempt to get the correct sort ordering (it crashes)
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"tag"
ascending:YES];
request.sortDescriptors = @[sortDescriptor];

上面的排序描述符返回数据(我假设它是按某种顺序排列的)但随后崩溃了:

[_NSFaultingMutableOrderedSet compare:]: unrecognized selector sent to instance 0x10b058f0
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason:
'-[_NSFaultingMutableOrderedSet compare:]: unrecognised selector sent to instance 0x10b058f0'

如果我给出一个空的排序描述符数组,那么我不会崩溃,但结果没有排序。

如何使用 ios5 中的有序关系功能在多对多关系中正确实现排序描述符?

最佳答案

我认为您可能误解了 Core Data 中有序关系的含义。根据 this question ,“有序”并不意味着“关于某些属性” - 相反,“有序”意味着“保留用户的订单”(或其他看起来随意的特定订单)。一些例子:

  • 有序关系适用于食谱中的步骤(来自 Apple 的 Core Data Release Notes 的示例)- 这些步骤不一定根据它们的任何属性(例如它们的文本)进行排序,并且必须保持如果 Core Data 没有进行排序,则它们自己的“索引”或“排序”属性。
  • 有序关系不适合名称列表 - 例如,用户可以选择按名字或姓氏排序,而名称集合在内部没有真正的内在顺序。唯一重要的是显示顺序——数据本身不需要维护该顺序。 (Apple 文档中的经验法则是,如果用户可以想象地在排序说明符之间进行选择,则关系不应在 Core Data 中排序。)

在您的情况下,您尝试将排序描述符应用到您正在获取的有序集合集(tags 属性的值)。这是您崩溃的原因 - NSOrderedSet 子类(_NSFaultingMutableOrderedSet,在您的情况下)没有实现排序描述符将用于对它们进行排序的 -compare: 方法,所以你得到了那个异常(exception)。

我认为对您来说一个好的解决方案是完全不使用排序描述符;相反,如果您想更改保留的显示顺序以显示给用户,请获取某些项目上的 tags 的 NSOrderedSet 值,然后使用 -sortedArrayUsingComparator: 以您自己的排序从中获取数组.这将使数据在 Core Data 中保持正确的顺序,但您可以通过编程自行重新排序。

在更高的层次上,您可能还想考虑您是否真的需要在人际关系中保持秩序。它会导致显着的性能损失,您真正得到的只是将标签添加到项目的原始顺序(反之亦然)。如果您打算在每次显示标签时都更改该顺序,那么您将对性能产生影响而没有任何实际好处 - 让您的关系无序,然后继续以编程方式排序或在聚合键上使用排序描述符,例如 tags.@count,如评论中所建议。

关于ios - 核心数据 : What should I use as a Sort Descriptor with ordered set (ios5) in a many to many relationship,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12304488/

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