2011-09-08 8 views
0

私はiPadのアプリケーションを使用して、idleTimerDisabledを環境設定のスイッチでYESまたはNOに設定できます。その部分は正常に動作します。しかし、最初にアプリデリゲートのdidFinishLaunchingWithOptionsメソッドをYESに設定するのは、アプリが初めて実行された場合(デバイスが自動的にスリープ状態になる)です。iOS:didFinishLaunchingWithOptionsでUIApplication idleTimerDisabledをYESに設定することはできません

私は最初にNOに設定し、次にYESに設定するというハックを試みましたが、他のスレッドでは使用できません。環境設定の他のすべての側面(standardUserDefaults)もうまくいきます。 objectForKeyがnilである場合

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
    // if app run for the first time, set these as defaults 
    NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults]; 
    if (![prefs objectForKey:@"autoSleep"]) { 
    // this conditional code runs, as traced using NSLog 
    [prefs setBool:YES forKey:@"autoSleep"]; 
    application.idleTimerDisabled = NO; 
    application.idleTimerDisabled = YES; 
    } 
} 
+0

タイマーが実際に動作していませんか? getterメソッドは '-isIdleTimerDisabled'であることに注意してください。 – PengOne

+0

良い質問です。私はそれをチェックしていませんでしたが、[application isIdleTimerDisabled]は1を返します。デバイスはとにかくスリープします。 – Gregir

+0

ロングショットですが、長いフォームを試してみてください: '[application setIdleTimerDisabled:YES]; ' – PengOne

答えて

1

registerDefaultsNSUserDefaultsの方法の代わりに、テストを使用します。

はここに関連するコードです。

details about this in the relevant Programming Guideも参照してください。 registerDefaultsを使用してデフォルト値を登録すると("autoSleep"キーの場合はNOの値)、このキーには、ユーザーのアプリケーション設定で設定された値、またはこのデフォルトの値ユーザーが値をまだ設定していない場合。

このように、デフォルトキーまたはユーザー指定キーのいずれかの値が常にあるので、問題を解決するはずです。

+0

これは問題を解決しませんでした(これはXCode経由の最初のインストールであることが判明しましたが)、registerDefaultsについてのあなたの意見はよく取られています。先端に感謝します。 – Gregir

+0

アイドルタイマーが無効になっていてはいけないときは無効にし、そうしなければならないときには無効にしないという奇妙な問題が続きました。問題がまだ100%解決されているかどうかはわかりませんが、registerDefaultsを使用した後は問題が少ないようです。 – Gregir

+0

@AliSoftware、あなたのコメントは、キーが存在するかどうかをテストするために、NSUserDefaults:objectForKeyを使用することに潜在的な問題または欠点があることを暗示しています。もっと具体的になりますか? –

関連する問題