gpt4 book ai didi

objective-c - 将一对多核心数据关系的前 5 个值绑定(bind)到文本字段

转载 作者:行者123 更新时间:2023-12-03 16:44:48 25 4
gpt4 key购买 nike

我正在使用 Core Data 制作一个代表手机账单的应用程序。我有三个实体:BillLineCalls。帐单可以有很多线路,线路可以有很多电话。这一切都是靠关系建立起来的。现在,我有一个显示所有账单的表格 View 。当您双击账单时,会出现一个带有弹出框的工作表,其中列出了账单上的所有行。弹出框下方是一个包含许多标签的框,显示有关该行的各种信息。在该信息下方,我想列出该月该线路调用的前 5 个号码。 LinesCalls 具有一对多关系,后者有两个字段:号码和分钟。我将对所选行的所有调用加载到 NSArrayController 中,并使用正确排列值的排序描述符。如何使用此数组 Controller 的前 5 个值填充 5 个标签?

编辑: 调用数组已经是唯一的,当我收集数据时,我将所有单独的调用合并为每个月每个号码的总分钟数。我只需要排序并显示这个组合数组的前 5 条记录。

最佳答案

我可能是错的(我真的希望我是错的),但看起来你需要对这个使用暴力。没有set / array operators这有帮助,NSPredicate 也没有帮助。似乎有帮助。

我认为这实际上有点棘手,看起来你必须做一些编码。 Core Data Programming Guide说:

If you execute a fetch directly, you should typically not add Objective-C-based predicates or sort descriptors to the fetch request. Instead you should apply these to the results of the fetch. If you use an array controller, you may need to subclass NSArrayController so you can have it not pass the sort descriptors to the persistent store and instead do the sorting after your data has been fetched.

我认为这适用于您的情况,因为重要的是要考虑在获取请求中首先进行排序还是过滤(当设置获取请求谓词和排序描述符时)。这是因为您会想使用 @distinctUnionOfObjects 集合/数组运算符。如果列表在排序之前折叠为唯一值,则无济于事。如果排序后应用,您只需将获取请求的限制设置为 5 即可得到结果。

鉴于文档,我不知道它是如何工作的。另外,在这种情况下,避免使用 NSArrayController 来解决此特定问题并仅使用 NSTableViewDataSource 协议(protocol)可能会更容易,但这超出了本问答的范围。

所以,这是一种方法:

  1. 创建一个谓词来过滤所选帐单的订单项。*
  2. 创建一个排序描述符来对按电话号码列出的行项目(希望在内部标准化格式,否则麻烦在等待)通过@“call.number”在你的情况下。
  3. 为该行创建一个提取请求项目实体,带有谓词和对描述符进行排序然后执行它**。

对于这些排序结果,如果您可以轻松折叠并“唯一”它们,那就太好了,并且您会再次尝试使用 @distinctUnionOfObjects。不幸的是,集合/数组运算符在这里没有任何帮助(您不能直接在 NSArray/NSMutableArray 或 NSSet/NSMutableSet 实例上使用它们)。那么,这就是蛮力。

我会创建一个 topFive 数组并循环遍历结果,如果 topFive 尚不存在,则将其添加到 topFive 中,直到 topFive 有 5 个项目或直到我没有结果。

正如我所说,在 UI 中显示它(使用或不使用绑定(bind))超出了本问答的范围,因此我将其留在那里。我很想听听是否有更好的方法来做到这一点 - 这绝对是那些“看起来应该很容易,但事实并非如此”的事情之一。 :-)

*您还可以在获取过程中在关键路径中使用 @unionOfObjects 来获取所选账单的行项目的调用次数,这可能会更有效地获取,但我已经厌倦了打字,你就明白了。 ;-)

**实际上,我可能会将获取请求限制在合理的范围内 - 某些账单(尤其是企业和青少年)可能会相当大。

关于objective-c - 将一对多核心数据关系的前 5 个值绑定(bind)到文本字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3241380/

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