Ответ 1
Я думаю, что в симуляторе есть известная ошибка, которая дважды вызывает метод уведомления делегата. Это не должно происходить на устройстве, привязано к XCode или нет.
Я обрабатываю локальные уведомления, используя:
- (void)application:(UIApplication *)app didReceiveLocalNotification:(UILocalNotification *)notif
И запланировать локальное уведомление:
- (void)scheduleNotificationWithInterval:(int)minutesBefore {
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
if (localNotif == nil)
return;
NSDate *fireDate = [NSDate date];
localNotif.fireDate = [fireDate dateByAddingTimeInterval:minutesBefore*60];
localNotif.timeZone = [NSTimeZone defaultTimeZone];
localNotif.repeatInterval = kCFCalendarUnitMinute;
localNotif.alertBody = [NSString stringWithFormat:NSLocalizedString(@"LocalEvent notification in %i minutes.", nil),minutesBefore];
localNotif.alertAction = NSLocalizedString(@"View Details", nil);
localNotif.applicationIconBadgeNumber = 1;
NSDictionary *infoDict = [NSDictionary dictionaryWithObjectsAndKeys:@"This is dict, you can pass info for your notification",@"info",nil];
localNotif.userInfo = infoDict;
[[UIApplication sharedApplication] scheduleLocalNotification:localNotif];
[localNotif release];
NSLog(@"Event scheduled");
}
Когда я получаю уведомление, didReceiveLocalNotification:
вызывается дважды.
Я что-то делаю неправильно?
Пожалуйста, помогите.
Спасибо.
Я думаю, что в симуляторе есть известная ошибка, которая дважды вызывает метод уведомления делегата. Это не должно происходить на устройстве, привязано к XCode или нет.
i также столкнулась с одной и той же проблемой, и решение, которое я нахожу, это написать этот код в didReceiveLocalNotification
if (state == UIApplicationStateActive) {
NSLog(@"UIApplicationStateActive");
}
else if(state == UIApplicationStateInactive){
NSLog(@"UIApplicationStateInActive");
}
здесь, в этих условиях, я просто пишу код, который хочу, чтобы мое приложение выполняло уведомление, в активном режиме и в неактивном режиме
Я подозреваю, что уведомление перезаписывается, пока оно остается в той же самой секунде. Я исправил это, установив fireDate на nil в обработчике:
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification
{
UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:notification.alertAction message:notification.alertBody delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alertView show];
notification.fireDate = nil;
}
У меня было то же самое. Это было вызвано вызовом 'registerUserNotificationSettings' дважды в AppDelegate 'didFinishLaunchingWithOptions.' Однако просто удаление дублированного вызова еще не устранило проблему. Мне пришлось удалить приложение, а затем восстановить. Только тогда проблема с двойным локальным уведомлением будет исправлена.