iOS:无法在didFinishLaunchingWithOptions中将UIApplication idleTimerDisabled设置为YES

时间:2011-09-08 22:52:31

标签: ios ipad uiapplication idle-timer

我有一个iPad应用程序,用户可以通过首选项中的开关将idleTimerDisabled设置为YES或NO。那部分工作正常。但是,最初在应用委托的didFinishLaunchingWithOptions方法中将其设置为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;
    }
}

1 个答案:

答案 0 :(得分:1)

使用NSUserDefaults的{​​{3}}方法,而不是测试objectForKey是否为零。

另见registerDefaults。使用registerDefaults(在您的情况下为NO键的值"autoSleep")注册默认值后,您可以确保在此键中有一个值,即应用程序设置中的值。由用户...或者如果用户尚未为其设置值,则为默认值。

因此它应该解决您的问题,因为您将始终拥有autoSleep密钥的值,无论是默认密钥还是用户提供的密钥。