applicationWillTerminate不会被调用

1 macos cocoa objective-c

我想在终止之前保存我的数据,所以我的AppControll类符合NSApplicationDelegate协议,并声明了方法; 在界面构建器中,我将窗口的委托出口绑定到AppController,但是我无法调用该方法.

我错了,我该怎么办?

Pet*_*sey 10

你是从Xcode终止应用程序的吗?或者,您的Info.plist中是否启用了突然终止?

这些中的任何一个都会导致SIGTERM信号被发送到应用程序,立即终止,NSApplication实例无法向其委托发送applicationWillTerminate:消息.(这是突然终止的重点:你的应用程序会立即死亡.你可以将它关闭,然后以编程方式关闭,这会很糟糕.)

尝试退出自己的应用程序(应用程序菜单中的退出菜单项),或使用Dock退出它(右键单击应用程序的磁贴并选择"退出").只要突然终止被禁用(或从未启用),任何一项都将导致您的应用程序对象发送applicationWillTerminate:消息.

还要检查您的代理是否收到了其他应用程序代理消息,例如applicationWillFinishLaunching:,并确保您将插座连接到正确的笔尖(您的MainMenu笔尖).


Wil*_*Niu 5

您是否记得将处理程序添加到应用程序中?

UIApplication *app = [UIApplication sharedApplication];
[[NSNotificationCenter defaultCenter] 
   addObserver:self
   selector:@selector(applicationWillTerminate:)
   name:UIApplicationWillTerminateNotification object:app];
Run Code Online (Sandbox Code Playgroud)

  • 文档表明这不是必需的:http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplicationDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/UIApplicationDelegate/applicationWillTerminate:注意它被记录为采用 UIApplication 对象,而不是 NSNotification,这表明委托方法不是通知处理程序。您不需要观察通知即可接收此消息。即使在 Cocoa 中,它是一个通知,您仍然不需要明确地观察它。 (4认同)
  • @William - 因为 applicationWillTerminate: 是 UIApplicationDelegate 协议的一部分,将被系统自动调用。我和彼得在一起,这应该不需要。 (2认同)