macOS/iOS API解説

iOS , Mac アプリケーション開発のために使われる主要フレームワークの日本語情報です。2010年代に書かれた内容です。今後更新はありません。

目次

applicationShouldTerminate:

INDEX>AppKit>NSApplication

アプリケーションが終了するときに呼び出されます

Objective-C

-(NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)sender:

Swift

optional func applicationShouldTerminate(_ sender: NSApplication) -> NSApplicationTerminateReply

解説

アプリケーションが終了するときに呼び出されます。

終了前になにか処理が必要な場合はNSTerminateLaterを返して、処理が終わってからNSAppに
replyToApplicationShouldTerminateを送信します。
NSTerminateLaterを送信した場合は2分以内に- (void)replyToApplicationShouldTerminate:(BOOL)shouldTerminate;を呼びます。

返り値

( NSApplicationTerminateReply )

【NSApplicationTerminateReply】
NSTerminateCancel 終了しない
NSTerminateNow 今すぐ終了
NSTerminateLater 後で終了

Swift
.TerminateCancel //アプリケーション終了をキャンセル
.TerminateLater //あとで
.TerminateNow //アプリケーション終了する

引数

( NSApplication * )sender

送信オブジェクト

フレームワーク

ApplicationKit

クラス

NSApplication

使用可能

10.0

編集時のバージョン

OS X 10.10

例文

Objective-C

#import "Controller.h"

@implementation Controller
NSTimer *timer=nil;


- (NSApplicationTerminateReply)applicationShouldTerminate:(NSApplication *)theApplication
{
	NSLog(@"applicationShouldTerminate");
	NSDate *theDate = [NSDate dateWithTimeIntervalSinceNow:10]; //10秒後にタイマー起動  
	//userInfoに使う辞書を作成
	NSDictionary *userInfoDictionary =[NSDictionary dictionaryWithObjectsAndKeys:
						@"value1",@"key1",
						@"value2",@"key2",
						@"value3",@"key3",nil];
	//タイマー作成
	timer = [NSTimer scheduledTimerWithTimeInterval:1.0
							target:		self
							selector:	@selector(timerControl:)
							userInfo:	userInfoDictionary
								repeats:NO];
	//起動時間セット
	[timer setFireDate:theDate];
	[[NSRunLoop currentRunLoop] addTimer:timer forMode:NSModalPanelRunLoopMode];
	
	return NSTerminateLater;
}

//2分以内に
-(void) timerControl:(NSTimer *)aTimer
{
	NSLog(@"...%@",[[aTimer userInfo] objectForKey:@"key2"]);
	//NSLog([[timer fireDate] description]);
	[NSApp replyToApplicationShouldTerminate:YES];
}

@end

Swift

    func applicationShouldTerminate(sender: NSApplication!) -> NSApplicationTerminateReply {
        NSLog("applicationShouldTerminate")
        
        //return .TerminateCancel //アプリケーション終了をキャンセル
        //return .TerminateLater      //あとで
        return .TerminateNow    //アプリケーション終了する
        
    }