Objective c NSTableViewDelegate接收多个NSN通知
我有一个基于视图的NSTableView,其数据由NSArrayController的子类提供。阵列控制器还从其他对象接收通知(仅2个),通知其更新。只要阵列控制器不是NSTableView的委托,一切都会按预期工作,并且每个通知只接收一次。当我将阵列控制器作为NSTableView(在IB中)的委托连接时,这些相同的通知会收到多次(比如数百次!)。阵列控制器仅为这些通知注册一次(在awakeFromNib:)。通知和委托在Cocoa中是两个独立的机制Objective c NSTableViewDelegate接收多个NSN通知,objective-c,macos,cocoa,nstableview,nsnotification,Objective C,Macos,Cocoa,Nstableview,Nsnotification,我有一个基于视图的NSTableView,其数据由NSArrayController的子类提供。阵列控制器还从其他对象接收通知(仅2个),通知其更新。只要阵列控制器不是NSTableView的委托,一切都会按预期工作,并且每个通知只接收一次。当我将阵列控制器作为NSTableView(在IB中)的委托连接时,这些相同的通知会收到多次(比如数百次!)。阵列控制器仅为这些通知注册一次(在awakeFromNib:)。通知和委托在Cocoa中是两个独立的机制 您的代码中肯定还有其他原因,因为附加代理不
您的代码中肯定还有其他原因,因为附加代理不应更改接收到的通知的数量/种类。为了子孙后代的利益 在苹果的“Mac桌面视图编程指南”中,有一个小亮点: 注意:使用标识符调用makeViewWithIdentifier:owner:会导致在应用程序中多次调用awakeFromNib。这是因为makeViewWithIdentifier:owner:加载一个具有传入所有者的NIB,并且所有者还接收一个awakeFromNib调用,即使它已经处于唤醒状态
因此,当作为委托附加时,我的类'awakeFromNib:被调用用于每个可见的NSTableView单元格,导致每次都注册通知观察者。谢谢,Jay。这就是我困惑的地方。这段代码在以前的版本中运行得很好,但现在已经崩溃了。唯一的实质性变化是从基于单元格的NSTableView变为基于视图的NSTableView。我会继续挖。