performSelector:withObject:afterDelay: 不在 NSPanel 中工作?

performSelector:withObject:afterDelay: not working in a NSPanel?

我有一个奇怪的情况。

我已经使用一些自定义代码将 NSTableview 子类化。 我在继承自该子类的 NSWindow 中有一个 tableView。 NSPanel 中的另一个 tableView 在 window.

上打开

在子类中,我用函数 performSelector:withObject:afterDelay: 调用了一个方法。

NSWindow中的table调用成功,NSPanel中的table调用失败

如果我直接调用该方法(不使用延迟函数),它就会起作用。因此,performSelector:withObject:afterDelay: 似乎无法在 NSPanel 中工作。

有什么建议吗?

NSPanel 很可能 运行 模态,有它自己的事件循环,所以尝试 performSelector:withObject:afterDelay:inModes:@[NSDefaultRunLoopMode, NSModalPanelRunLoopMode] 作为 inModes 参数。

请参阅 runModalForWindow 了解事件循环内容的要点。

同样的问题reported here