【发布时间】:2011-10-27 01:55:36
【问题描述】:
上下文
我在我的应用程序中有一个非常正常的设置:一个 NSOutlineView(由一个绑定到核心数据的 NSTreeController 支持)填充一个 NSTableView(由一个绑定到核心数据的 NSArrayController 支持)基于用户在大纲视图中选择的内容。两个控制器(及其视图)都以正常方式绑定 ---> NSArrayController 上的 contentSet 绑定指向由 outlineView 中选定行表示的对象的 NSSet 属性。
因此,假设用户在大纲视图中选择“文件夹 X”。 “文件夹 X”中有 1200 个项目,每个项目都由一个 Core Data 实体支持,每个项目都是 tableView 中的一行。
问题
我的应用程序需要更改这 1,200 个实体中的每一个的属性,所以我有一个循环来执行此操作。但是,每次我访问一个实体并设置一个新属性时,NSTreeController 和 NSArrayController 都会触发一个 KVO 通知,并将更改的实体作为通知的对象。这是杀死性能。
如果在大纲视图中未选择任何内容,则循环或多或少会立即完成。如果选择了“文件夹 X”,这些 KVO 通知会将处理速度减慢到大约 8 秒。
我需要什么
一种阻止控制器触发 KVO 通知的方法,或者一种解决问题的方法,以便在 NSController 中选择实体时更新实体不会变慢。
【问题讨论】:
标签: objective-c cocoa core-data key-value-observing