uilocalnotification не срабатывает в точное время

Я хочу реализовать uilocalnotification в своем приложении. но проблема в том, что он не стреляет в точное время. срабатывает через 30-40 секунд от заданного времени стрельбы. Есть ли что-то, что я упускаю, или это распространенное мнение в UILocalNotification.

Спасибо


person Robin    schedule 21.02.2011    source источник
comment
Для чего вы его используете? Я предполагаю, что UILocalNotification не предназначен для такой точности?   -  person deanWombourne    schedule 21.02.2011
comment
Просто из интереса, как вы измеряете эту ошибку?   -  person deanWombourne    schedule 21.02.2011


Ответы (3)


UILocalNotification предназначен для вещей, которые происходят в далеком будущем, поэтому ошибка в 30 секунд будет приемлемой (например, если бы у меня была встреча в 15:00, то сообщение в 15:00:30 не было бы проблемой :)

Если вам нужна большая точность, вам нужно будет поддерживать работу приложения и использовать NSTimer.

person deanWombourne    schedule 21.02.2011
comment
Ты уверен насчет этого. потому что, если мой клиент спросит меня о задержке, я должен четко сказать об этом, или моя шея будет в его руке. поэтому, если вы можете предоставить мне несколько ссылок, которые говорят то же самое, тогда это будет полезно, заранее спасибо - person Robin; 21.02.2011
comment
Досадно, что я нигде не могу найти это в явном виде, но, поскольку эта система предназначена для использования уведомлений из внешних источников, я предполагаю, что они не очень заботятся о точности. Однако, если это такая большая проблема, просто запланируйте их на 30 секунд раньше ;) - person deanWombourne; 21.02.2011
comment
это был мой первоначальный план. Я думаю, что я должен сделать это в любом случае, так что спасибо. - person Robin; 21.02.2011

Я знаю, что это старый вопрос, но я только что понял это, вы можете использовать метод dateByAddingTimeInterval :.

notif.fireDate = [[datePicker date] dateByAddingTimeInterval:-30];
person Jazzmanouch    schedule 28.03.2011
comment
проблема с локальными уведомлениями заключается в том, что они не срабатывают в точное время, когда им говорят. Если вы используете приведенный выше код, локальное уведомление сработает через 1 мин. до времени пожара вы хотели. поэтому может показаться, что он сработал в 3:50, но на самом деле в вашем случае это будет 3:49. это заставит вас почувствовать, что уведомление сработало в точное время, но это не так. и в некоторых случаях он не сработает, если пользователь хочет установить уведомление через 1 минуту. - person Robin; 29.03.2011
comment
Это предполагает, что смещение всегда будет 30 секунд, это хак, но должно работать, предполагая, что 30 секунд всегда имеет место. - person WrightsCS; 13.11.2012

Вы можете установить fireDate с помощью NSDateComponents, в котором вы можете установить секунды для даты запуска. Когда я устанавливаю его на 0, он не работает, но он работает, если я устанавливаю его на 1 секунду. Опоздание на 1 секунду будет в порядке по сравнению с 30-40 секундами.

NSCalendar *cal = [NSCalendar currentCalendar];
    NSDateComponents *dateComps = [cal components:NSCalendarUnitYear | NSCalendarUnitMonth | NSCalendarUnitDay |NSCalendarUnitHour | NSCalendarUnitMinute | NSCalendarUnitSecond   fromDate:fireDate];
    [dateComps setSecond:1];
    [dateComps setNanosecond:00];
    NSDate *newDate = [cal dateFromComponents:dateComps];
    fireDate = newDate;
person Jyoti S.    schedule 12.01.2017