我有一个基于视图的NSTableView,其数据由NSArrayController的子类提供。阵列控制器还从其他对象接收NSNotifications(仅2),告知它更新。只要阵列控制器不充当NSTableView的委托,一切都按预期工作,每个通知只接收一次。当我将阵列控制器作为NSTableView(在IB中)的委托附加时,这些相同的通知被多次(例如数百次)接收。阵列控制器仅为这些通知注册一次(在awakeFromNib中)。
答案 0 :(得分:2)
通知和代表在Cocoa中是两个独立的机制。
您的代码中必定还有其他内容,因为附加代理不应更改正在接收的通知的数量/种类。
答案 1 :(得分:0)
为了子孙后代。
在Apple的桌面视图编程指南中用于Mac'是这个小金块:
注意:调用makeViewWithIdentifier:owner:会导致在应用中多次调用awakeFromNib。这是因为makeViewWithIdentifier:owner:使用传入的所有者加载NIB,并且所有者也会收到一个awakeFromNib调用,即使它已经处于唤醒状态。
所以,作为代表,我的班级' awakeFromNib:正在为每个可见的NSTableView单元调用,导致通知观察者每次都被注册。