2011-01-04 9 views
0

私が現在取り組んでいるアプリケーションには設定を伝えるのに問題がありますが、いったん閉じてからもう一度開くとうまくいくようです。目覚まし時計アプリケーションなので、マルチタスクの恩恵を受けません。私は適切な設定を保存しNSUserDefaultsを使用しておりますので、私はマルチタスクを遮断している:ios 4アプリを強制的に閉じて再度開く方法はありますか?

@implementation MyAppDelegate 

- (void) applicationDidEnterBackground:(UIApplication *)application { 
     exit(0); 

} 
... 
@end 

だから、この時点で、ユーザーが手動で閉じて再度開くアプリを持っています。アプリを閉じて再度開く(自動的に)ために送信できるコマンドはありますか?設定ビューコントローラが画面から削除されたときに特定の設定が変更された場合は、アプリケーションを終了して再起動します。

+1

これは、マルチタスクを無効にする正しい方法ではありません。アプリのInfo.plistに 'UIApplicationExitsOnSuspend'キーを追加して、代わりに有効にする必要があります。 – BoltClock

答えて

5

いいえ、アプリを強制的に再起動することはできません。あなたのコードにexit()を使用するとApple HIGに違反します。

設定が変更されたときにユーザーに警告を表示することをお勧めします。設定を変更すると、次回の起動時に設定が有効になることが通知されます。

infoitplistにUIApplicationExitsOnSuspendを追加してマルチタスクを無効にし、それをtrueに設定する必要があります。

+0

前にUIApplicationExitsOnSuspendを動作させようとしましたが、ブール型に変更する必要があることを認識していませんでした。私は警戒の考えも考えていました。私はデリゲートメソッドを納得させたいが、このバージョンでは必要ない。アラームはバックグラウンドでは消えることができないため、バックグラウンドにするための機能的な理由はありません。 –

6

重要なユーザーエクスペリエンスである終了時にアプリケーションを強制終了するのではなく、問題の根本を解決する必要があります。

あなたが伝播することを拒否しているアプリケーションの中で行われた設定に問題がある場合は、ディスクに設定をフラッシュする

[[NSUserDefaults standardUserDefaults] synchronize]; 

を使用してみてください。

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(handleChangeInUserSettings:) name:NSUserDefaultsDidChangeNotification object:nil]; 
:アプリケーションがバックグラウンドにあるとき、あなたがに実行している問題は、設定は[設定]アプリケーションで変更されていることである場合

、これらの設定の変更をリッスンアプリケーションにオブザーバーを追加

何かが変更された場合、アプリケーションがフォアグラウンドに戻るときにトリガーされます。この方法では、ユーザーインターフェイスまたはアプリケーションのその他の要素を、更新された設定で調整する必要があるように更新します。

関連する問題