UIApplicationDelegateプロトコル

2010. 05. 16
アプリケーションのライフサイクル(2)』で一度説明していますが、説明していなかったメソッドも含めてまとめます。


●概要

UIApplicationDelegateプロトコルは、シングルトンのUIApplicationオブジェクトのデリゲートを宣言するメソッドです。
(シングルトンはインスタンスを一つしか作らないクラスのことで、何処で何回呼ばれても同じインスタンスを返します)

このメソッドを実行すると、アプリケーションの起動と終了、メモリ不足の警告、URLリソースを開く、ステータスバーの向きの変更などシステムイベントにデリゲートが応答できるようになります。

iPhone OS 3.0では、リモート通知関連のメソッドやapplication:didFinishLaunchingWithOptions:を追加しました。

application:didFinishLaunchingWithOptions:メソッドはapplicationDidFinishLaunching:の代わりに呼び出すことができます。

これらの新しいメソッドは次の二つの状況を想定しています。

・iPhone OSがアプリケーションにリモート通知を配信し、ユーザがその通知に応答して起動する
・UIApplicationのopenURL:メソッドで、URLのスキーム(リソースを取得する手段)からリソースタイプを判別して他のアプリケーションを起動する

通常の場合は起動する理由が異なるので、別のユーザインターフェイスでアプリケーションを選択します。

UIApplicationは、application:didFinishLaunchingWithOptions:のオプションで指定されている辞書(NSDictionaryオブジェクト)を渡します。

アプリケーションを起動する要因となる辞書には二つ有り、一つはopenURL:メソッドを呼び出したアプリケーションのバンドルID(バンドル識別子)かURLオブジェクトを含む辞書、もう一つはリモート通知に含まれるペイロードの辞書です。

このメソッドがデリゲートを作る場合、起動時に以下の順序で呼び出されます

application:didFinishLaunchingWithOptions:
applicationDidBecomeActive:

代替として

applicationDidFinishLaunching:
applicationDidBecomeActive:
application:handleOpenURL:(アプリケーションの起動にURLが使われている場合)

同様に、プッシュ通知を受けてアプリケーションを起動させる際に、application:didFinishLaunchingWithOptions:メソッドとapplication:didReceiveRemoteNotification:メソッドの両方を実装すると、後者のメソッドは実行されません。

双方の場所でリモート通知を処理する必要があります。


●タスク

・アプリケーション動作の制御

- applicationDidFinishLaunching:
- application:didFinishLaunchingWithOptions:
- applicationWillTerminate:
- applicationDidReceiveMemoryWarning:
- applicationSignificantTimeChange:

・URLリソースの開始

- application:handleOpenURL:

・ステータスバーの向きの管理

- application:willChangeStatusBarOrientation:duration:
- application:didChangeStatusBarOrientation:

・アクティブステータスの変更への対応

- applicationWillResignActive:
- applicationDidBecomeActive:

・アプリケーションの外観の制御

- application:willChangeStatusBarFrame:
- application:didChangeStatusBarFrame:

・リモート通知の処理

- application:didReceiveRemoteNotification:
- application:didRegisterForRemoteNotificationsWithDeviceToken:
- application:didFailToRegisterForRemoteNotificationsWithError:


●インスタンスメソッド


・application:didChangeStatusBarFrame:

- (void)application:(UIApplication *)application didChangeStatusBarFrame:(CGRect)oldStatusBarFrame

ステータスバーのフレームが変更されたことをデリゲートに伝えます

アプリケーションは、UIApplicationDidChangeStatusBarFrameNotificationを投じるのと同時に、このメソッドを呼び出します

application:デリゲートするアプリケーションオブジェクトを指定します

oldStatusBarFrame:画面座標中のステータスバーの以前のフレームを指定します


・application:didChangeStatusBarOrientation:

- (void)application:(UIApplication *)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation

ステータスバーのインターフェイスの向きが変更されたことをデリゲートに伝えます

デリゲートは共有しているUIDeviceオブジェクトから、現在のデバイスの向きを得ることができます

アプリケーションは、UIApplicationDidChangeStatusBarOrientationNotificationを投じるのと同時に、このメッセージをデリゲートに送ります

application:デリゲートするアプリケーションオブジェクトを指定します

oldStatusBarOrientation:この定数は、アプリケーションユーザインターフェイスの以前の向きを示します


・application:didFailToRegisterForRemoteNotificationsWithError:

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error

Apple Push Serviceの登録プロセスが失敗した時にデリゲートに送ります

デリゲートはこのメッセージを返した後、UIApplicationのregisterForRemoteNotificationsメソッドを発動し、登録プロセスのエラーを示します

application:登録プロセスのリモート通知を開始するアプリケーションを指定します

error:登録に失敗した理由の情報をカプセル化したNSErrorオブジェクトを指定します
アプリケーションは、ユーザにこの情報を示すことができます


・application:didFinishLaunchingWithOptions:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

リモート通知やURLリソースを開くことにより、アプリケーションが起動することをデリゲートに伝えます

アプリケーションがURLリソースを処理できなかった場合はNO、処理できた場合はYESを返します

リモート通知の結果によってアプリケーションが起動した場合は、この戻り値は無視されます

同じlaunchOptions辞書の値でも、UIApplicationDidFinishLaunchingNotificationがアクセスするuserInfo辞書と、同通知が見るアプリケーションデリゲートがアクセス可能なオブジェクトは異なります

applicationDidFinishLaunching:の代わりに、このメソッドを使用することを推奨します
(2つの解説を見比べて下さい)

application:デリゲートするアプリケーションオブジェクトを指定します

launchOptions:次の2つの状況に関連する情報を含む辞書を指定します
・iPhone OSがアプリケーションにリモート通信を配信し、警告メッセージの表示を経てアプリケーションを起動する場合
・URLのリソースをスキームで判別し、他のアプリケーションを開く場合
前者の場合、launchOptionsの辞書は、通知ペイロードの辞書を含みます
(詳細はapplication:didReceiveRemoteNotification:を参照)
後者の場合、launchOptionsの辞書は、URLの示すオブジェクトと、URLが開こうとしているアプリケーションのバンドル識別子を含みます
この辞書は、ユーザがアプリケーションのアイコンをタップして起動した場合はnilになります
詳細はUIApplication Class Referenceの『UserInfo Dictionary Keys』に、これらの辞書オブジェクトのキーやアクセス方法の説明があります


・application:didReceiveRemoteNotification:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

リモート通知を受けてアプリケーションが実行された時に、デリゲートに送ります

アプリケーションが実行されてリモート通知が届くと、このメッセージをデリゲートが受けます

アプリケーションは、通常プロバイダへの接続とデータのダウンロードを待ってから応答します

また、それが有用だと判断した他の方法で、通知を処理します

userInfoの辞書は、apsキーを使用して入手できる他の辞書を含みます

(ほとんどの場合必要ありませんが)以下のキーで、aps辞書の内容にアクセスできます

・alert:この値には、警告メッセージの文字列か、bodyとshow-viewの2つのキーの辞書があります
前者の値は警告メッセージ、後者はブール値(falseまたはtrue)です
falseの場合、警告のビューボタンは表示されません
デフォルトではビューボタンは表示され、ユーザがタップするとアプリケーションが起動します

・badge:プロバイダからダウンロードしたデータアイテムの数量を数字で示します
この数字はアプリケーションアイコンの上に表示されます
badgeプロパティが空を示している場合は、現在アイコンに付けられているバッジを削除する必要があります

・sound:警告音として再生する、アプリケーションバンドルの中のサウンドファイル名です
『default』を指定した場合は、デフォルトの音を再生します

userInfo辞書は、JSONスキーマに基づいてプロバイダがカスタムデータを定義しています

カスタムデータのプロパティは、aps辞書と同じレベルで指定する必要があります

ただしcustom-definedプロパティは、通知のサイズが256バイトと制限されており、配信の保証もされていないので大量のデータ転送には使用しないでください

プッシュ通知を処理するためにアプリケーションを起動しようと、application:didFinishLaunchingWithOptions:を実行しても、このメソッドはプッシュ通知を呼び出しません

詳細はクラスの説明を参照してください

application:リモート通知を受けるアプリケーションを指定します

userInfo:アプリケーションアイコンに付けるバッジの数字や警告音、ユーザに表示する警告メッセージ、通知の確認、カスタムデータなど、リモート通知に関する情報を含む辞書を指定します


・application:didRegisterForRemoteNotificationsWithDeviceToken:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken

アプリケーションがApple Push Service(APS)の登録に成功した時に、デリゲートに送ります

デリゲートは、UIApplicationのregisterForRemoteNotificationsメソッドが呼び出された後、登録プロセスにエラーが無い場合にこのメッセージを受け取ります

デバイストークンを受け取った後、アプリケーションはプロバイダと接続し、トークンを与えます

APSはこのトークンを伴って、アプリケーションのデバイスに通知をプッシュします

他にも稀な状況、例えばユーザがアプリケーションを起動した後に、デバイスのバックアップデータが無く、デバイスからデータを復元する場合にこのメソッドを呼び出します

この例外的なケースでは、アプリケーションはユーザが起動するまで新しいデバイスのトークンを知りません

application:リモート通知の登録プロセスが開始されたアプリケーションを指定します

deviceToken:APSにデバイスを認識させるトークンを指定します
デバイスに通知を送る時、プロバイダがAPSサーバに型を送る必要があるため、トークンのデータ型は不明瞭です
パフォーマンス上の理由から、APSサーバはバイナリフォーマットを必要とします
注:UIDeviceのuniqueIdentifierプロパティからのデバイストークンは異なり、セキュリティとプライバシー上の理由から、デバイスが消去された時は変える必要があります


・application:handleOpenURL:

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

URLを識別し、リソースを開くかデリゲートに尋ねます

デリゲートがリクエストの処理に成功した場合の戻り値はYES、URLの処理に失敗した場合はNOを返します

アプリケーションはURLを開く処理で、aapplication:didFinishLaunchingWithOptions:を代わりに選択することができます

その場合、application:handleOpenURL:メソッドは呼び出されません

このデリゲートメソッドには、相当する通知がされます


・application:willChangeStatusBarFrame:

- (void)application:(UIApplication *)application willChangeStatusBarFrame:(CGRect)newStatusBarFrame

ステータスバーのフレームが変更された時にデリゲートに伝えます

アプリケーションは、setStatusBarOrientation:animated:メッセージを受け取り、インターフェイスの向きが変更された時にこのメソッドを呼び出します

アプリケーションはこのメソッドを呼び出すのと同時に、UIApplicationWillChanfeStatusBarFrameNotificationを投じます

application:デリゲートするアプリケーションオブジェクトを指定します

newStatusBarFrame:変更された画面座標のステータスバーのフレームを指定します


・application:willChangeStatusBarOrientation:duration:

- (void)application:(UIApplication *)application willChangeStatusBarOrientation:(UIInterfaceOrientation)newStatusBarOrientation duration:(NSTimeInterval)duration

ステータスバーのインターフェイスの向きが変更された時にデリゲートに伝えます

デリゲートは通常、新しい向きのウィンドウやビューを準備するために、このメソッドを実行します

デリゲートは、共有しているUIDeviceオブジェクトから、現在のデバイスの向きを取得することができます

アプリケーションはこのメッセージをデリゲートに送信するのと同時に、UIApplicationWillChangeStatusBarOrientationNotificationを投じます

application:デリゲートするアプリケーションオブジェクトを指定します

newStatusBarOrientation:アプリケーションのユーザインターフェイスの新しい向きを示す定数です

duration:新しい向きへのアニメーションの継続時間を秒単位で指定します


・applicationDidBecomeActive:

- (void)applicationDidBecomeActive:(UIApplication *)application

アプリケーションがアクティブになったことをデリゲートに伝えます

アプリケーションが非アクティブ状態からアクティブ状態になった時に、デリゲートはこのメソッドを実行することができます

アプリケーションが非アクティブの時に実行されますが、受信したイベントは送信しません

ウィンドウにポップアップがオーバーレイされた時や、デバイスがロックされていても発生します

アクティブになった後、アプリケーションはUIApplicationDidBecomeActiveNotificationを投じます

application:シングルトンのアプリケーションインスタンスを指定します


・applicationDidFinishLaunching:

- (void)applicationDidFinishLaunching:(UIApplication *)application

アプリケーションの起動が完了した時に、デリゲートに伝えます

このメソッドは、デリゲートが様々な初期化とタスクを構成する理想的な場で、特にアプリケーションのウィンドウとビューの初期設定と、アプリケーションを前の状態に戻す際に使われます

アプリケーションはこのメソッドを呼び出すのと同時に、UIApplicationDidFinishLaunchingNotificationを投じます

このメソッドの代わりにapplication:didFinishLaunchingWithOptions:を実行することを推奨します
(2つの解説を見比べて下さい)

application:デリゲートするアプリケーションオブジェクトを指定します


・applicationDidReceiveMemoryWarning:

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application

アプリケーションがシステムからメモリの警告を受け取った時に、デリゲートに伝えます

このメソッドを実行する際には、(ディスクからの再読み込みなどで)キャッシュのデータオブジェクトを再構築した後で、可能な限りメモリを解放する必要があります

アプリケーションのメモリを全て解放するには、UIViewControllerクラスのdidReceiveMemoryWarningとUIApplicationDidReceiveMemoryWarningNotification通知を一緒に使用します

このメソッドの実行を強く推奨します

メモリ不足の状態の際に、アプリケーションが十分にメモリを解放できなかった場合は、システムが完全に終了すことがあります

application:デリゲートするアプリケーションオブジェクトを指定します


・applicationSignificantTimeChange:

- (void)applicationSignificantTimeChange:(UIApplication *)application

時刻が大幅に変更された時に、デリゲートに伝えます

時刻の大幅な変更例は、深夜の到着、キャリアによる時刻の更新、夏時間への変更などがあります

デリゲートはこのメソッドで、アプリケーションのオブジェクトの表示時刻や、時刻変更の感度を調整することができます

アプリケーションはこのメソッドを呼び出すのと同時に、UIApplicationSignificantTimeChangeNotificationを投じます

application:デリゲートするアプリケーションオブジェクトを指定します


・applicationWillResignActive:

- (void)applicationWillResignActive:(UIApplication *)application

アプリケーションが非アクティブになったことに、デリゲートに伝えます

アプリケーションがアクティブ状態から非アクティブ状態になった時に、デリゲートはこのメソッドを実行することができます

アプリケーションが非アクティブの時に実行されますが、受信したイベントは送信しません

ウィンドウにポップアップがオーバーレイされた時や、デバイスがロックされていても発生します

非アクティブになる前に、アプリケーションはUIApplicationWillResignActiveNotificationを投じます

application:シングルトンのアプリケーションインスタンスを指定します


・applicationWillTerminate:

- (void)applicationWillTerminate:(UIApplication *)application

アプリケーションが終了する時に、デリゲートに伝えます

このメソッドは、デリゲートがタスクのクリーンアップをする理想的な場で、生成したメモリの解放やタイマーの無効化、アプリケーションの状態を格納します

アプリケーションはこのメソッドを呼び出すのと同時に、UIApplicationWillTerminateNotificationを投じます

application:デリゲートするアプリケーションオブジェクトを指定します



参考文献

UIApplicationDelegate Protocol Reference

基礎からのiOS SDK基礎からのiOS SDK
(2010/10/09)
鶴薗 賢吾、松浦 健一郎 他

商品詳細を見る






Wave SoundTouch music system IV
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
06 | 2017/07 | 08
Sun Mon Tue Wed Thu Fri Sat
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

Wave SoundTouch music system IV
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR