2013-12-13 4 views
0

Местное уведомление увольняется примерно за 2 часа. Дата, когда я установил ее для стрельбы на выставках 2013-12-13 17:00:00 +0000Локальное уведомление об увольнении в неподходящее время

Однако мой телефон снял мне уведомление в 15:00:00. Я хочу, чтобы он срабатывал в локальное время пользователей. Как настроить дату, чтобы она срабатывала в локальном часовом поясе пользователей ... т. Е. независимо от того, где вы находитесь в США, он стреляет в 17:00:00?

Вот поездка моего NSDate. Я разбираю XML-файл. Из PubDate тега:

NSDate *articleDate = [NSDate dateFromInternetDateTimeString:articleDateString formatHint:DateFormatHintRFC822]; 
      NSString *articleImage = [item valueForChild:@"description"]; 
      NSDateFormatter * dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
      [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
      [dateFormatter setDateStyle:NSDateFormatterShortStyle]; 

      NSString *dateofarticle = [dateFormatter stringFromDate:articleDate]; 
      NSDate *date = [dateFormatter dateFromString:dateofarticle]; 

дата NSDate * добавляется к свойству из пользовательского класса я настроил, чтобы хранить все от каждого элемента XML. Таким образом, NSDate, который привыкает к уведомлению, - это. Когда я устанавливаю уведомление, я не корректирую NSDate.

От напоминания UIActivity:

- (void)prepareWithActivityItems:(NSArray *)activityItems 
{NSLog(@"works"); 
    Class cls = NSClassFromString(@"UILocalNotification"); 
    if (cls != nil) { 
     NSString *message = [@"5 minutes until " stringByAppendingString:self.thetitle]; 
     UILocalNotification *notif = [[cls alloc] init]; 
     // NSLog(@"%@", self.thedate); 
     NSDate *newDate = [self.thedate dateByAddingTimeInterval:-60*5]; 
     NSDateFormatter *formatter3 = [[NSDateFormatter alloc] init]; 

     [formatter3 setTimeZone:[NSTimeZone timeZoneWithName:@"GMT"]]; 
     [formatter3 setTimeStyle:NSDateFormatterShortStyle]; 
     [formatter3 setDateStyle:NSDateFormatterShortStyle]; 
     NSString *detailstext = [formatter3 stringFromDate:newDate]; 
     NSDate *othernewdate = [formatter3 dateFromString:detailstext]; 
     NSLog(@"other%@", othernewdate); 
     notif.timeZone = [NSTimeZone systemTimeZone]; 

     notif.fireDate = othernewdate; 

     //NSLog(@"newdate%@", newDate); 

     notif.alertBody = message; 
     notif.alertAction = @"Ok"; 
     notif.soundName = UILocalNotificationDefaultSoundName; 
     notif.applicationIconBadgeNumber = 1; 


       notif.repeatInterval = 0; 


     NSDictionary *userDict = [NSDictionary dictionaryWithObject:message 
                  forKey:kRemindMeNotificationDataKey]; 
     notif.userInfo = userDict; 

     [[UIApplication sharedApplication] scheduleLocalNotification:notif]; 
     [self.notifications addObject:notif]; 
     [notif release]; 

    } 
    NSLog(@"Test"); 
    [self activityDidFinish:YES]; 
    } 
- (void)showReminder:(NSString *)text { 

    UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"Reminder" 
                 message:text delegate:nil 
               cancelButtonTitle:@"OK" 
               otherButtonTitles:nil]; 
    [alertView show]; 
    [alertView release]; 
} 

NSLog (@ "% @ другой", othernewdate); показывает как 2013/12/13 16:55:00 +0000 в консоли. Я в Центральном часовом поясе.

ОБНОВЛЕНИЕ # 2 В той области, где запланировано уведомление, я выполняю некоторые тесты. Я изменил XML pubDate, чтобы показать -0600 по прошествии времени, чтобы он оставался центральным временем. Я запускаю этот код и журналы.

NSDateFormatter *formatter3 = [[NSDateFormatter alloc] init]; 

     [formatter3 setTimeStyle:NSDateFormatterShortStyle]; 
     [formatter3 setDateStyle:NSDateFormatterShortStyle]; 
     NSString *detailstext = [formatter3 stringFromDate:self.thedate]; 
     NSDate *othernewdate = [formatter3 dateFromString:detailstext]; 
     NSLog(@"details%@", detailstext); 
     NSLog(@"other%@", othernewdate); 

Строка показывает правильную дату и время на данном входе:

details12/27/13, 3:00 вечера

NSDate показывает это. Итак, мой вопрос в этом. С того времени ниже технически то же время ... должен огонь уведомление правильно ?:

other2013-12-27 21:00:00 +0000

ответ

3

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

localNotification.timeZone = [NSTimeZone systemTimeZone]; 

Если вам нужны уведомления стрелять в ваш часовой пояс-х 17:00, используйте timeZoneWithName: для создания временной зоны объекта вашего часового пояса и установить, что в часовом поясе местного уведомлений,.

+0

Я хочу, чтобы он стрелял в 17:00 независимо от того, где вы находитесь. Когда наступает 5 часов, срабатывает уведомление. Однако даже настройка часового пояса на systemTimeZone не сработала для меня. – user717452

+0

Как вы устанавливаете дату? Если вы напечатаете объект «NSDate» в отладчике, он отображается в часовой пояс GMT, поэтому не доверяйте тому, что там говорит. –

+0

См. Вышеизложенное для получения дополнительной информации, поскольку это слишком долго, чтобы добраться сюда. – user717452

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