我有一个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;
}
}
答案 0 :(得分:1)
使用NSUserDefaults
的{{3}}方法,而不是测试objectForKey是否为零。
另见registerDefaults
。使用registerDefaults(在您的情况下为NO
键的值"autoSleep"
)注册默认值后,您可以确保在此键中有一个值,即应用程序设置中的值。由用户...或者如果用户尚未为其设置值,则为默认值。
因此它应该解决您的问题,因为您将始终拥有autoSleep
密钥的值,无论是默认密钥还是用户提供的密钥。