3

Cocoa アプリを開発していますが、アプリを閉じる前にさまざまなアクションを実行する必要があります。再起動によっていつアプリが閉じられたのか、シャットダウンによっていつ閉じられたのかを知る必要があります。

アプリを介しNSWorkspaceWillPowerOffNotificationて、それが再起動またはシャットダウンであるという事実に関係なく、通知を受け取ります。

電源オフの原因を特定する方法はありますか?

4

1 に答える 1

0

おそらく使用する必要はなく、以下のコードでデリゲートをNSWorkspaceWillPowerOffNotification 使用できます。applicationShouldTerminate:システムが再起動/シャットダウンされているか、ユーザーがログアウトしている場合、アプリはとにかく終了します。

Apple Developer Forum から : アプリケーションの「終了」がログアウトまたは再起動/シャットダウンによるものかどうかを判断する方法は?

https://developer.apple.com/forums/thread/94126

//#import <Foundation/Foundation.h>
//#import <Carbon/Carbon.h> // for kEventParamReason

- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
    NSAppleEventDescriptor* appleEventDesc = [[NSAppleEventManager sharedAppleEventManager] currentAppleEvent];
    NSAppleEventDescriptor* whyDesc = [appleEventDesc attributeDescriptorForKeyword:kEventParamReason];
    OSType why = [whyDesc typeCodeValue];
    switch (why) {
        case kAEShutDown: {
            NSLog(@"kAEShutDown");
            break;
        }
        case kAERestart: {
            NSLog(@"kAERestart");
            break;
        }
        case kAEReallyLogOut: {
            NSLog(@"kAEReallyLogOut");
            break;
        }
    }
    ...
    return NSTerminateNow;
}
于 2021-09-30T20:21:27.963 に答える