gpt4 book ai didi

objective-c - NSTreeController + 核心数据 : STOP KVO?

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

上下文

我的应用程序中有一个非常正常的设置:NSOutlineView(由绑定(bind)到核心数据的 NSTreeController 支持)根据用户在大纲 View 中选择的内容填充 NSTableView(由绑定(bind)到核心数据的 NSArrayController 支持)。两个 Controller (及其 View )都以正常方式绑定(bind) ---> NSArrayController 上的 contentSet 绑定(bind)指向轮廓 View 中所选行所表示的对象的 NSSet 属性。

因此,假设用户在大纲 View 中选择“文件夹 X”。 “文件夹 X”中有 1,200 个项目,每个项目都由一个 Core Data 实体支持,并且每个项目都是 tableView 中的一行。

问题

我的应用程序需要更改这 1,200 个实体中每个实体的属性,因此我有一个循环来执行此操作。但是,每次我访问一个实体并设置一个新属性时,NSTreeController 和 NSArrayController 都会触发 KVO 通知,并将更改的实体作为通知的对象。这是致命的表现。

如果在outlineView中没有选择任何内容,循环或多或少会立即完成。如果选择“文件夹 X”,这些 KVO 通知会将进程减慢至约 8 秒。

我需要什么

一种阻止 Controller 触发 KVO 通知的方法,或者一种解决该问题的方法,以便在 NSController 中选择实体时更新实体不会变慢。

最佳答案

您可以使用NSManagedObject-setPrimitiveValue:forKey:方法。这将允许您设置属性的值而不触发 KVO 观察者。

请注意,一般情况下,您应该使用动态生成的访问器,而不是直接使用此方法(例如,setPrimitiveName: 而不是 setPrimitiveValue:newName forKey:@"name")。

关于objective-c - NSTreeController + 核心数据 : STOP KVO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7061986/

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