2011-09-08 23 views
0

我有一個iPad應用程序,用戶可以通過首選項中的開關將idleTimerDisabled設置爲YES或NO。這部分工作正常。但是,如果應用程序第一次運行時不起作用(設備自動進入休眠狀態),則最初在應用程序委託的didFinishLaunchingWithOptions方法中將其設置爲YES。iOS:無法在didFinishLaunchingWithOptions中將UIApplication idleTimerDisabled設置爲YES

我試過將其設置爲NO,然後設置爲YES,如其他線程中所述,無濟於事。首選項的所有其他方面(standardUserDefaults)也正常工作。

下面是相關代碼:

- (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

使用的NSUserDefaultsregisterDefaults方法,而不是測試,如果objectForKey是零。請參閱details about this in the relevant Programming Guide。一旦你使用registerDefaults註冊了默認值(在你的情況下,你的鍵的值爲NO),你可以確保你在這個鍵中有一個值,或者是用戶在應用程序設置中設置的值......或者這個默認值如果用戶尚未爲其設置值。

因此,它應該可以解決您的問題,因爲您將始終爲您的autoSleep鍵(默認鍵或用戶提供的鍵)提供值。

+0

這並沒有解決這個問題(它原來是通過XCode進行的初始安裝),但是你關於registerDefaults的觀點已經很好了。謝謝你的提示。 – Gregir

+0

我繼續有奇怪的問題,我的空閒計時器將被禁用,當它不應該是,而不是當它應該是禁用。雖然我不確定這個問題是否已經完全清理完畢,但使用registerDefaults後,我似乎遇到了更少的問題。 – Gregir

+0

@AliSoftware,您的評論意味着使用NSUserDefaults存在潛在的問題或缺點:objectForKey測試是否存在密鑰。你可以說得更詳細點嗎? –

相關問題