iOS: локальные уведомления не запускаются по времени - PullRequest
2 голосов
/ 23 января 2012

Проблема в том, что мои уведомления не проходят, когда они настроены на. Я поставил указатель даты в перо и кнопку под ним. Предполагается, что пользователь должен установить дату в средстве выбора и, нажав кнопку, настроить оповещение на срабатывание за 60 часов до даты. Так что, похоже, у меня просто проблемы с получением фрейнда для распознавания даты в окне выбора даты. Вот код, на мой взгляд контроллер:

- (IBAction)scheduleNotifButton:(id)sender {
UILocalNotification *localNotif = [[UILocalNotification alloc] init];

NSDate *selectedDate = [self.datePicker date];


localNotif.fireDate = [selectedDate  dateByAddingTimeInterval:-60*60*60];
localNotif.timeZone = [NSTimeZone defaultTimeZone];


localNotif.alertBody = @"Event is in three days!";

localNotif.alertAction = nil;

localNotif.soundName = UILocalNotificationDefaultSoundName;
localNotif.applicationIconBadgeNumber = 0;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];    

UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Event scheduled."
                                                message:@"You will be notified three days before the event."
                                               delegate:nil
                                      cancelButtonTitle:@"Okay."
                                      otherButtonTitles:nil];
[alert show];

}

А вот еще один дополнительный код, если это помогает, это еще один код из моего контроллера представления, который имеет дело с сохранением даты в средстве выбора, введенном пользователем:

- (IBAction)dateChanged:(id)sender
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];

    NSDate *selectedDate = [self.datePicker date];

    [defaults setObject:selectedDate forKey:@"ImportantDatesViewController.selectedDate"];
    [defaults synchronize];

}
- (void)viewDidLoad {
    NSDate *storedDate = [[NSUserDefaults standardUserDefaults] 
                          objectForKey:@"ImportantDatesViewController.selectedDate"];
    if (storedDate == nil) {
        storedDate = [NSDate date];
    }

    [self.datePicker setDate:storedDate animated:NO];

}

Я копаю этот код уже 3 дня и не могу понять, почему мои уведомления не проходят, когда они должны. Любая помощь очень ценится, спасибо!

Ответы [ 2 ]

3 голосов
/ 23 января 2012

Понимаете ли вы, что UILocalNotifications и удаленные уведомления - это разные вещи?

В didRegisterForRemoteNotificationsWithDeviceToken вы получаете токен устройства, который будет использоваться для удаленных уведомлений. Удаленные уведомления отправляются с сервера, поэтому вы должны сохранить этот токен на своем сервере, а затем использовать свой сервер для отправки любых удаленных уведомлений.

Почему бы вам не изменить это:

localNotif.fireDate = [eventDate dateByAddingTimeInterval:-630*60];

к этому:

localNotif.fireDate = [[NSDate date] dateByAddingTimeInterval:60];

Тогда местное уведомление должно отключиться через минуту. Возможно, проблема в том, что вы устанавливаете дату.

1 голос
/ 23 января 2012

Откуда вы знаете, что ваши уведомления не работают?

Локальные и push-уведомления различаются.Если ваше приложение в данный момент активно, локальное уведомление фактически не будет отображать предупреждающее сообщение.Он просто вызовет UIApplicationDelegateMethod

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
...