SDK2.2で作られたXcodeのプロジェクトを自分のXcode(SDK4.2)で開いた。
1) アプリ起動時に呼ばれるdidFinishLaunching(didFinishLaunchingWithOptions)でデータベースに接続。
2) 処理をいろいろして。
3) アプリ終了時に呼ばれるapplicationWillTerminateでデータベースに保存して、接続を切ってアプリ終了。
という流れのアプリ。
そんでもって自分の環境でリコンパイルしたところ、applicationWillTerminateが呼ばれない。
調べると、iOS4からマルチタスクになったからapplicationWillTerminateじゃなくて、applicationDidEnterBackgroundが呼ばれ、呼び戻す時には、applicationWillEnterForegroundが呼ばれる。
とのこと。
では、現行のSDK2.2でコンパイルされて、リリースされて、iOS4.2で動いてるこのアプリはapplicationWillTerminate呼ばれてるの?呼ばれてなかったら3) の保存処理されてないということですか?
ということで調べてみたところ、以下の条件下ではapplicationWillTerminateが呼ばれるとのことでした。
■ アプリケーションがiPhone SDK 3.x以前にリンクしている。
■ アプリケーションがiPhone OS 3.x以前のデバイス上にデプロイメントされている。
■ 現在のデバイスがマルチタスクをサポートしていない(「マルチタスクがサポートされている かどうかの確認」 (65 ページ)参照)。
■ アプリケーションのInfo.plistファイルにUIApplicationExitsOnSuspendキーが含まれてい る(「バックグラウンド実行を行わないことを選択」 (40 ページ)参照)。
ちょっとびびった。
ちなみにSDK2.2の入れ方がわからないので、デバッグできまへんでした。
iPhoneアプリケーションプログラミング ガイト:
http://developer.apple.com/jp/devcenter/ios/library/japanese.html