我有一个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;
}
}
使用NSUserDefaults
的registerDefaults
方法而不是测试objectForKey是否为nil
请参阅相关编程指南中的详细信息。一旦你使用registerDefaults注册了默认值(在你的情况下,NO
值为你的"autoSleep"
键),你就可以确保你将在这个键中有一个值,要么是由用户在应用程序的设置中设置的,要么是这个默认值,如果用户还没有为它设置一个值。
因此,它应该解决您的问题,因为您将始终拥有autoSleep
键的值,无论是默认值还是用户提供的值。