システム内のすべてのシャットダウンイベントを登録するバックグラウンドプロセスでプログラムを実行しようとしています。下記のショーとしてNSWorkspaceWillPowerOffNotificationに登録することにより、そうNSWorkspaceWillPowerOffNotificationが呼び出されませんでした
:私は理解できないことを何らかの理由で
#import <AppKit/AppKit.h>
@interface ShutDownHandler : NSObject <NSApplicationDelegate>
- (void)computerWillShutDownNotification:(NSNotification *)notification;
@end
int main(int argc, char* argv[]) {
NSNotificationCenter *notCenter;
notCenter = [[NSWorkspace sharedWorkspace] notificationCenter];
ShutDownHandler* sdh = [ShutDownHandler new];
[NSApplication sharedApplication].delegate = sdh;
[notCenter addObserver:sdh
selector:@selector(computerWillShutDownNotification:)
name:NSWorkspaceWillPowerOffNotification
object:nil];
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
[[NSFileManager defaultManager] createFileAtPath:@"./output.txt" contents:nil attributes:nil];
});
[[NSRunLoop currentRunLoop] run];
return 0;
}
@implementation ShutDownHandler
- (void)computerWillShutDownNotification:(NSNotification *)notification {
NSFileHandle* file = [NSFileHandle fileHandleForUpdatingAtPath: @"./output.txt"];
[file seekToEndOfFile];
NSDateFormatter* fmt = [NSDateFormatter new];
[fmt setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSDate* current = [NSDate date];
NSString* dateStr = [fmt stringFromDate:current];
[dateStr writeToFile:@"./output.txt" atomically:YES encoding:NSUTF8StringEncoding error:nil];
}
- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender
{
return NSTerminateCancel;
}
@end
は、NSWorkspaceWillPowerOffNotificationハンドラが呼び出されることはありません!
はまた、私の.plistに次を追加しました:
<key>NSSupportsSuddenTermination</key>
<false/>
が、まだ何の通知は、私のシステムをシャットダウンする際に登録されていません。
なぜですか?
こんにちは、おそらくあなたはこの障害を克服することができます。私も同じ問題を抱えています。はいの場合は、ここにソリューションを掲載できますか?ありがとう –