Я пытаюсь использовать UILocalNotification и установить часовой пояс в какой-то другой часовой пояс, чем мой по умолчанию.UILocalNotification с часовым поясом не по умолчанию
Цель состоит в том, чтобы сделать что-то вроде: -Узел запланирует оповещение с указанием времени и времени -Показать предупреждение, когда этот часовой пояс станет установленным временем.
В более вербальном описании, скажем, я живу в LosAngeles, а мой gf находится в Чикаго. Я хочу настроить оповещение, когда chicago - 7 утра, в будние дни.
Для одного предупреждения, я могу обойтись без часовой пояс, чтобы делать абсолютное время. Но я хочу разрешить пользователям устанавливать повторяющиеся флаги, и в этом случае я не могу ничего сделать - я пробовал установить свойство часового пояса localnotification на chicago, как показано выше, однако локальное уведомление не будет срабатывать.
Я вошел в uinocalnotification во время процесса сериализации, и вот один выход:
"<UIConcreteLocalNotification: 0xfb25a50>{fire date = 2011-02-06 06:02:00 -0800, time zone = America/Chicago (CST) offset -21600, repeat interval = 16, next fire date = 2011-02-06 08:02:00 -0800}"
Я установил firedate для 9:02 утр Чикагского абсолютного времени и часовой пояс для CST - и журнал упоминает о том, что дата огня действительно 06:02 по местному времени. Однако ничего не происходит. Кроме того, следующая дата огня - это странно, так как это должно быть +1 день, а не +2 часа.
Вот как я это установил: Класс classUILocalNotification = NSClassFromString (@ "UILocalNotification");
if (classUILocalNotification != nil) {
id note = [[classUILocalNotification alloc] init];
NSString *body = @"body message";
switch (repeatflag) {
case 1: [note setRepeatInterval:NSDayCalendarUnit]; break;
case 2: [note setRepeatInterval:NSWeekdayCalendarUnit]; break;
case 3: [note setRepeatInterval:NSWeekCalendarUnit]; break;
case 4: [note setRepeatInterval:NSMonthCalendarUnit]; break;
case 5: [note setRepeatInterval:NSYearCalendarUnit]; break;
default: break;
}
[note setFireDate:dt];
[note setAlertBody:body];
[note setTimeZone:timezone];
[note setHasAction:NO];
}
Это похоже на неизвестное поведение. У кого-то есть лучший способ добиться того, что я пытаюсь сделать? Спасибо!
Опубликуйте еще какой-нибудь код, чтобы мы могли проверить точную проблему! – KingofBliss
привет kongofbliss, спасибо за ответ. Кажется, что проблема связана с UILocalNotification (UILN), когда вы настраиваете ее на запуск с помощью чего-либо, кроме текущего tz. Я не понял, что именно, но когда tz не текущий tz, дата увольнения, кажется, запуталась в моем тестировании (ios4.0.2). Чтобы обойти это, мне просто пришлось запланировать uilocalnotification без информации о часовом поясе. Таким образом, дата интерпретируется как абсолютная и срабатывает правильно. Кстати, для тех, кто пытается это сделать, появляется ошибка с ios4.0 при удалении приложения и переустановка приложения - набор UILN из предыдущей установки появится в новом приложении. – Landasia