2012-01-22 7 views
2

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

- (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 дней, и теперь не могу понять, почему мои уведомления не доходят, когда они должны. Любая помощь очень ценится, спасибо!

ответ

3

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

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

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

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

к этому:

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

Затем локальное уведомление должно уйти в минуту. Возможно, проблема - это дата, которую вы устанавливаете.

+0

Спасибо. Он отправляет предупреждение, но, похоже, он не зависит от даты, когда пользователь входит в сборщик. – John

1

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

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

- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification 
+0

Да, это должно быть причиной. В любом случае, если вы хотите показать предупреждение в этом случае, вы можете вручную создать UIAlert и отобразить его вручную внутри этого приложения: - (void): (UIApplication *), сделанного методомReceiveLocalNotification: (UILocalNotification *). – Hlung

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