Пользовательские кнопки iOS не отображаются для интерактивного уведомления

В настоящее время я работаю над интерактивными уведомлениями iOS, сделанными 8, и, честно говоря, я действительно стараюсь видеть свои кнопки. С приведенным ниже кодом я не вижу своих кнопок:

// INTERACIVE

UIMutableUserNotificationAction *acceptAction = [[UIMutableUserNotificationAction alloc] init]; acceptAction.identifier = @"ACCEPT_IDENTIFIER"; acceptAction.title = @"Accept"; acceptAction.activationMode = UIUserNotificationActivationModeBackground; acceptAction.destructive = NO; acceptAction.authenticationRequired = NO; UIMutableUserNotificationAction *maybeAction = [[UIMutableUserNotificationAction alloc] init]; maybeAction.identifier = @"MAYBE_IDENTIFIER"; maybeAction.title = @"Maybe"; maybeAction.activationMode = UIUserNotificationActivationModeBackground; maybeAction.destructive = NO; maybeAction.authenticationRequired = YES; UIMutableUserNotificationAction *declineAction = [[UIMutableUserNotificationAction alloc] init]; declineAction.identifier = @"DECLINE_IDENTIFIER"; declineAction.title = @"Decline"; declineAction.activationMode = UIUserNotificationActivationModeBackground; declineAction.destructive = YES; declineAction.authenticationRequired = NO; UIMutableUserNotificationCategory *inviteCategory = [[UIMutableUserNotificationCategory alloc] init]; inviteCategory.identifier = @"INVITE_CATEGORY"; [inviteCategory setActions:@[acceptAction, maybeAction, declineAction] forContext:UIUserNotificationActionContextDefault]; [inviteCategory setActions:@[acceptAction, declineAction] forContext:UIUserNotificationActionContextMinimal]; NSSet *categories = [NSSet setWithObjects:inviteCategory, nil]; UIUserNotificationType types = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert; UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:types categories:categories]; [[UIApplication sharedApplication] registerUserNotificationSettings:settings]; [[UIApplication sharedApplication] registerForRemoteNotifications]; UILocalNotification* localNotification = [[UILocalNotification alloc] init]; localNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:10]; localNotification.alertBody = @"Testing"; localNotification.category = @"INVITE_CATEGORY"; // Same as category identifier [[UIApplication sharedApplication] scheduleLocalNotification:localNotification]; 

Любая идея для моей проблемы? Несмотря на все примеры в Интернете, я, по-видимому, единственный с этой проблемой.

Здесь действительно отличный учебник: Code Ninja

Все в вашем коде выглядит отлично. Я должен попросить вас убедиться, что вы просто не замечаете, что на самом деле происходит – если вы смотрите на уведомление на главном экране, вы промахнули влево уведомление, чтобы открыть кнопки?

Вот что я использую (извините за быстрый)

Начальная подсказка для уведомлений

  var openAction = UIMutableUserNotificationAction() openAction.identifier = "OPEN_IDENTIFIER" openAction.title = "Open" openAction.destructive = false openAction.authenticationRequired = false openAction.activationMode = .Foreground var snoozeAction = UIMutableUserNotificationAction() snoozeAction.identifier = "SNOOZE_IDENTIFIER" snoozeAction.title = "Snooze" snoozeAction.destructive = true snoozeAction.authenticationRequired = false snoozeAction.activationMode = .Background var snoozeable = UIMutableUserNotificationCategory() snoozeable.identifier = NOTE_SNOOZE_CAT snoozeable.setActions([openAction, snoozeAction], forContext: .Default) snoozeable.setActions([openAction, snoozeAction], forContext: .Default) var notSnoozable = UIMutableUserNotificationCategory() notSnoozable.identifier = NOTE_NO_SNOOZE_CAT notSnoozable.setActions([openAction], forContext: .Default) notSnoozable.setActions([openAction], forContext: .Default) UIApplication.sharedApplication().registerUserNotificationSettings(UIUserNotificationSettings(forTypes: .Sound | .Alert | .Badge, categories: NSSet(array:[snoozeable, notSnoozable]) )) 

Местное уведомление

  var notification = UILocalNotification() notification.fireDate = fireDate notification.timeZone = NSTimeZone.defaultTimeZone() notification.alertBody = "Alert Body" notification.userInfo = userInfo notification.category = blnCanSnooze ? NOTE_SNOOZE_CAT : NOTE_NO_SNOOZE_CAT UIApplication.sharedApplication().scheduleLocalNotification(notification) 

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

  NSMutableArray *arrNewCategories = [NSMutableArray new]; UIUserNotificationSettings *oldSettings = [[UIApplication sharedApplication]currentUserNotificationSettings]; for (UIMutableUserNotificationCategory *oldCategory in oldSettings.categories) { if (![oldCategory.identifier isEqualToString:newNotificationCategory.identifier]) [arrNewCategories addObject:oldCategory]; } [arrNewCategories addObject:newNotificationCategory]; UIUserNotificationType notificationType = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert; UIUserNotificationSettings *newSettings = [UIUserNotificationSettings settingsForTypes:notificationType categories:[NSSet setWithArray:arrNewCategories]]; [[UIApplication sharedApplication] registerUserNotificationSettings:newSettings]; 

Просто убедитесь, что идентификатор newNotificationCategory соответствует категории вашего UILocalNotification.

Interesting Posts
Давайте будем гением компьютера.