iOS: невозможно установить для UIApplication idleTimerDisabled значение YES в didFinishLaunchingWithOptions - PullRequest
0 голосов
/ 09 сентября 2011

У меня есть приложение для iPad, где пользователь может установить для idleTimerDisabled значение YES или NO с помощью переключателя в настройках. Эта часть отлично работает. Однако, первоначально установив его на YES в методе didFinishLaunchingWithOptions делегата приложения, если приложение запускается впервые, устройство не работает (в любом случае устройство автоматически спит).

Я пробовал взломать сначала установку на НЕТ, а затем на ДА, как описано в других темах, но безрезультатно. Все остальные аспекты настроек (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 Ответ

1 голос
/ 09 сентября 2011

Используйте метод registerDefaults для NSUserDefaults вместо проверки, если objectForKey равен nil.

См. Также подробности об этом в соответствующем Руководстве по программированию . Как только вы зарегистрируете значения по умолчанию, используя registerDefaults (в вашем случае значение NO для вашего ключа "autoSleep"), вы будете уверены, что у вас будет значение в этом ключе, либо то, которое установлено пользователем в настройках приложения… или это значение по умолчанию, если пользователь еще не установил для него значение.

Таким образом, это должно решить вашу проблему, поскольку у вас всегда будет значение для вашей клавиши autoSleep, либо значение по умолчанию, либо предоставленное пользователем.

...