每当我尝试注销当前用户时(不是快速用户切换!)我从macOS收到一条消息(对不起,如果不完全是消息,我用德语获取):" Unable注销,因为应用程序" com.my.app"不退出"。
为了避免这种情况,我需要什么?我目前在我的AppDelegate中有这个:
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
return NSTerminateNow;
}
- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)sender
{
return true;
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
[[[NSWorkspace sharedWorkspace] notificationCenter] addObserver: self
selector: @selector(receiveLogOffOrShutdown:)
name: NSWorkspaceWillPowerOffNotification object: NULL];
}
-(void) receiveLogOffOrShutdown: (NSNotification*) note
{
[application stop:nil];
}
我所观察到的例子是receiveLogOffOrShutdown
永远不会被触发。和applicationShouldTerminate
一样,永远不会触发断点。
我在这里错过了什么吗?
答案 0 :(得分:0)
使用NSApp.terminate方法
目标C
-(void)relaunch {
int processIdentifier = NSProcessInfo.processInfo.processIdentifier;
NSString *path = [NSBundle mainBundle].executablePath;
NSArray *arg = [NSArray arrayWithObjects:[NSString stringWithFormat:@"%d",processIdentifier], nil];
[NSTask launchedTaskWithLaunchPath:path arguments:arg];
[NSApp terminate:self];
}
<强>夫特强>
func relaunch() {
let processIdentifier: Int32 = NSProcessInfo.processInfo().processIdentifier
let path = NSBundle.mainBundle().executablePath! as NSString
// let myPath: String = "\(path.fileSystemRepresentation)"
NSTask.launchedTaskWithLaunchPath(path as String, arguments: ["\(processIdentifier)"])
NSApp.terminate(self)
}
func terminate(sender:AnyObject?) 调用时,此方法执行几个步骤来处理终止请求
希望这对你有所帮助。