gpt4 book ai didi

cocoa - 延迟获取和维护排序的 NSArrayController

转载 作者:行者123 更新时间:2023-12-03 16:15:37 26 4
gpt4 key购买 nike

我有一个示例项目

https://github.com/ericgorr/LazyFetching

设置非常简单。在我的 CoreData 模型中,我有两个实体:

  1. 具有 name 属性和与 Item 实体的一对多关系(项目)的 Shelf
  2. 具有 name 属性的项目与 Shelf 实体有关系(它是“父级”)

然后我有两个 NSArrayController:

模式为“实体名称”的货架阵列 Controller ,实体名称为“货架”。它准备内容并使用延迟获取。

项目数组 Controller ,模式为“实体名称”,实体名称为“项目”。它不准备内容,也不使用延迟获取。它的内容集绑定(bind)到货架阵列 Controller 的选择和“items”属性。

在窗口上,我有两个 NSTableView 和两个 + 按钮,每个按钮都与一个数组 Controller 相连。

我所做的是:

  1. 按顶部 + 按钮并将新的书架条目命名为“a”
  2. 再次按顶部 + 按钮并将书架条目命名为“b”
  3. 按顶部列标题可按升序对书架条目进行排序。
  4. 确保选择“b”条目
  5. 按底部 + 按钮并将项目条目重命名为任意内容

然后我看到上层(货架)表中的行更改顺序,以便首先列出“b”条目。

如果我按“信息”按钮,它将执行以下操作:

  1. NSLog 存储货架数组 Controller 的排序描述符
  2. 打印Shelf Array Controller的arrangedObjects数组中条目的名称
  3. 在货架阵列 Controller 上调用rearrangeObjects
  4. 打印出Shelf Array Controller的arrangedObjects数组中条目的名称

完成所有这些之后,正如预期的那样,我在货架数组 Controller 上看到了一个排序描述符:名称、升序、比较:

排列对象的输出如下:

2013-05-19 16:08:56.023 LazyFetching[11791:303] b

2013-05-19 16:08:56.024 LazyFetching[11791:303] a

2013-05-19 16:08:56.024 LazyFetching[11791:303] b

2013-05-19 16:08:56.024 LazyFetching[11791:303] a

由于某种原因,它不再对货架阵列 Controller 中的项目进行排序。

如果我关闭货架阵列 Controller 的延迟获取,一切似乎都能正常工作。

所以,我不明白的是为什么在启用延迟获取的情况下我会看到这种行为。这似乎有可能是一个错误。如果是这样,我当然可以提交可能是重复的报告。但是,我猜测,有一些很好的解释和标准的处理方法,因此项目仍然按数组 Controller 的arrangedObjects 数组中的排序描述符进行排序。

最佳答案

我发现在打开 NSArrayController(在 IB 中)的延迟获取后强制排序的唯一方法是在 awakeFromNib 中发送一个 PerformSelector:withObject:afterDelay: 并将延迟设置为 0:

  • (void)awakeFromNib {[self PerformSelector:@selector(sort) withObject:self afterDelay:0.0];}

  • (空)排序{

    NSSortDescriptor* 排序 = [NSSortDescriptor sortDescriptorWithKey:@"" 升序:是];

    [self.AC_Controller setSortDescriptors:[NSArray arrayWithObject:排序]];}

这些方法包含在我的主窗口 Controller 中,其中 NSArrayController 驻留在关联的 nib 文件中。

  • 似乎在加载包含 NSArrayController 的 Nib 时, Nib 加载机制会根据 IB 设置调用延迟获取,但这会覆盖您可能尝试以编程方式或通过 NSTableView 中的 IB 设置的任何排序 - 通过等待下一个运行循环排序将“采取”确定。

当然,此代码假设您有一个连接到 NSArrayController 的 IBOutlet。

关于cocoa - 延迟获取和维护排序的 NSArrayController,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16703867/

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