Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSTableViewDelegate接收多个NSN通知_Objective C_Macos_Cocoa_Nstableview_Nsnotification - Fatal编程技术网

Objective c NSTableViewDelegate接收多个NSN通知

Objective c NSTableViewDelegate接收多个NSN通知,objective-c,macos,cocoa,nstableview,nsnotification,Objective C,Macos,Cocoa,Nstableview,Nsnotification,我有一个基于视图的NSTableView,其数据由NSArrayController的子类提供。阵列控制器还从其他对象接收通知(仅2个),通知其更新。只要阵列控制器不是NSTableView的委托,一切都会按预期工作,并且每个通知只接收一次。当我将阵列控制器作为NSTableView(在IB中)的委托连接时,这些相同的通知会收到多次(比如数百次!)。阵列控制器仅为这些通知注册一次(在awakeFromNib:)。通知和委托在Cocoa中是两个独立的机制 您的代码中肯定还有其他原因,因为附加代理不

我有一个基于视图的NSTableView,其数据由NSArrayController的子类提供。阵列控制器还从其他对象接收通知(仅2个),通知其更新。只要阵列控制器不是NSTableView的委托,一切都会按预期工作,并且每个通知只接收一次。当我将阵列控制器作为NSTableView(在IB中)的委托连接时,这些相同的通知会收到多次(比如数百次!)。阵列控制器仅为这些通知注册一次(在awakeFromNib:)。

通知和委托在Cocoa中是两个独立的机制


您的代码中肯定还有其他原因,因为附加代理不应更改接收到的通知的数量/种类。

为了子孙后代的利益

在苹果的“Mac桌面视图编程指南”中,有一个小亮点:

注意:使用标识符调用makeViewWithIdentifier:owner:会导致在应用程序中多次调用awakeFromNib。这是因为makeViewWithIdentifier:owner:加载一个具有传入所有者的NIB,并且所有者还接收一个awakeFromNib调用,即使它已经处于唤醒状态


因此,当作为委托附加时,我的类'awakeFromNib:被调用用于每个可见的NSTableView单元格,导致每次都注册通知观察者。

谢谢,Jay。这就是我困惑的地方。这段代码在以前的版本中运行得很好,但现在已经崩溃了。唯一的实质性变化是从基于单元格的NSTableView变为基于视图的NSTableView。我会继续挖。