2011-02-06 2 views
0

Я пытаюсь использовать 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]; 
} 

Это похоже на неизвестное поведение. У кого-то есть лучший способ добиться того, что я пытаюсь сделать? Спасибо!

+0

Опубликуйте еще какой-нибудь код, чтобы мы могли проверить точную проблему! – KingofBliss

+0

привет kongofbliss, спасибо за ответ. Кажется, что проблема связана с UILocalNotification (UILN), когда вы настраиваете ее на запуск с помощью чего-либо, кроме текущего tz. Я не понял, что именно, но когда tz не текущий tz, дата увольнения, кажется, запуталась в моем тестировании (ios4.0.2). Чтобы обойти это, мне просто пришлось запланировать uilocalnotification без информации о часовом поясе. Таким образом, дата интерпретируется как абсолютная и срабатывает правильно. Кстати, для тех, кто пытается это сделать, появляется ошибка с ios4.0 при удалении приложения и переустановка приложения - набор UILN из предыдущей установки появится в новом приложении. – Landasia

ответ

0

При использовании нелокального часового пояса появляется ошибка с UILocalNotification. Первое запущенное событие уволено за правильную дату и время и часовой пояс. Однако последующие события срабатывают в течение заданной даты и времени в вашем локальном часовом поясе, а не в том, что установлено в методе setTimeZone. [iOS 6.1]

Смежные вопросы