未宣布,在搜索为什么在退出时(Cmd + Q)AppDelegate.m中没有调用-applicationShouldTerminate:
时,会发现下图中的2个通知。它工作了一段时间。
将鼠标悬停在两个黄色三角形上显示:
答案 0 :(得分:1)
在应用程序的主要NIB中,两个占位符File的所有者和应用程序最终都引用了同一个对象。该对象是应用程序对象,NSApplication
的唯一实例或其自定义子类。应用程序占位符始终保留应用程序对象的位置,因为它的目的。文件的所有者占位符在运行时加载任何对象被指定为NIB所有者的位置。当Cocoa在应用程序启动时加载主NIB时,它将应用程序对象指定为所有者。对于其他NIB,文件所有者可能是其他一些对象。
但是,Interface Builder并不知道给定的NIB是主要的。因此,它独立地对待这两个占位符。
我不知道为什么Interface Builder将Application占位符的类设置为NSObject
。它应该是NSApplication
。这就是为什么Interface Builder没有意识到应用程序对象具有delegate
插座和操作方法-terminate:
的原因。
实际上,File的所有者类已正确设置为NSApplication
。
所以,有两种方法可以解决这个问题:
NSApplication
,或者在极少数情况下将您的子类设置为该子类。对于任何给定的主要NIB,您应该标准化使用其中一个而不是两个。也就是说,一个或另一个应该没有连接。这样就可以避免冲突或冗余连接。