автоблокировка устройства ios, NSTimer и scheduleTimerWithTimeInterval

Я хотел бы вызвать действие через некоторое время (в производстве это будет 30 минут), и сейчас я использую NSTimers scheduledTimerWithTimeInterval. Во время тестов (с тайм-аутом 20 секунд, а не 1800 секунд) все вроде нормально. В режиме отладки (работает из XCode) тоже все нормально, т.к. устройство не блокируется автоматически. Но в реальной жизни, когда приложение запускается на устройстве, автоблокировка (именно автоблокировка, кнопка блокировки срабатывания не работает) «замораживает» таймер (или, по крайней мере, каким-то образом перемещает триггер таймера в будущее).

Могу ли я справиться с этой ситуацией? Конечно, я могу отключить idleTimer в UIApplication sharedApplication, но когда приложение перейдет в фоновый режим, iPad все еще может автоматически блокироваться.


person patryk    schedule 23.08.2013    source источник
comment
Что такое действие? Вы просто хотите уведомить пользователя, а затем выполнить действие, если он примет уведомление?   -  person Wain    schedule 23.08.2013


Ответы (1)


На самом деле вы можете,

Прежде всего, создайте значение по умолчанию для «startTimeOfMyExoticTimer» в NSUserDefaults:

[[[NSUserDefaults] standardDefaults] setObject:[NSDate date] forKey:@"startTimeOfMyExoticTimer"];

Затем запустите таймер, чтобы проверить, закончился ли допустимый диапазон времени:

[NSTimer scheduledTimerWithTimeInterval:0.1f target:self selector:@selector(checkIfTimeIsOver) userInfo:nil repeats:YES];

Затем реализуйте свой метод проверки:

-(void)checkIfTimeIsOver{
     NSDate * now = [NSDate date];
     NSDate * startTime = [[NSUserDefaults standardDefaults] objectForKey:@"startTimeOfMyExoticTimer"];

     // Here compare your now and startTime objects. (subsract them) and see the difference between them. If your time range is to be set on 30 seconds. Then you should check if the time difference between those objects are bigger than 30 seconds.

}

Это будет работать, даже если устройство заблокировано, приложение находится в фоновом режиме и т. д.

Этот подход сработал для меня, надеюсь, он сработает и для вас.

person rordulu    schedule 23.08.2013