Я настроил локальные уведомления в делегате приложения, используя это:
- (void)applicationDidEnterBackground:(UIApplication *)application
{
UILocalNotification *notification = [[UILocalNotification alloc]init];
[notification setAlertBody:@"Watch the Latest Episode of CCA-TV"];
[notification setFireDate:[NSDate dateWithTimeIntervalSinceNow:5]];
[notification setTimeZone:[NSTimeZone defaultTimeZone]];
[application setScheduledLocalNotifications:[NSArray arrayWithObject:notification]];
}
Когда я запускаю приложение, а затем выхожу из него, я получаю сообщение об ошибке:
2014-06-07 11: 14: 16.663 CCA-TV [735: 149070] Попытка запланировать локальное уведомление {fire date = суббота, 7 июня 2014 г., 11:14:21 Тихоокеанское летнее время, часовой пояс = America / Los_Angeles (PDT) смещение -25200 (дневной свет), интервал повтора = 0, количество повторов = UILocalNotificationInfiniteRepeatCount, дата следующего возгорания = суббота, 7 июня 2014 г., 11:14:21 по тихоокеанскому летнему времени, информация о пользователе = (null)} с предупреждением но не получил разрешения от пользователя на отображение предупреждений
Как я могу получить необходимое разрешение для отображения предупреждений?
источник
registerUserNotificationSettings
. Если бы это была iOS 8, эта ветка ответила бы на ваш вопрос. Но, вперед, посмотрите - stackoverflow.com/questions/24006998/…Ответы:
Начиная с iOS 8 вам необходимо запрашивать разрешение пользователя на отображение уведомлений из вашего приложения, это применимо как для удаленных / push-уведомлений, так и для локальных. В Swift это можно сделать так:
Обновление для Swift 2.0
Swift 3.2
Синтаксис Objective C также очень похож.
Чтобы проверить зарегистрированные в настоящее время типы уведомлений, вы можете использовать метод класса UIApplication,
Поэтому, если пользователь отказался от вашего приложения, эта функция должна вернуть параметр без каких-либо типов.
Я написал об этом учебник, вы можете увидеть его здесь .
источник
dyld: Symbol not found: _OBJC_CLASS_$_UIUserNotificationSettings
. Есть ли в Swift другой способ запросить у пользователя разрешения для работы в iOS7? пожалуйста помоги.Поместите этот код в контроллер представления, где вы сначала запрограммируете уведомления (если вы запрограммируете их при запуске, то это будет
application:didFinishLaunchingWithOptions:
):В Swift:
Решения, которые проверяют номер версии системы, неоптимальны и подвержены ошибкам.
источник
application.respondsToSelector(Selector("registerUserNotificationSettings"))
иif ([application respondsToSelector:@selector(registerUserNotificationSettings:)])
application:didFinishLaunchingWithOptions:
что дает удобныйapplication
объект :)Попробуйте это для Objective-C:
Для Swift:
источник
Я столкнулся с той же проблемой. Похоже, что в iOS 8 нам нужно сделать дополнительный шаг, обычно выполняемый внутри:
Вы можете использовать этот код, если хотите, чтобы он был обратно совместим:
Система запомнит решение и спросит только один раз.
источник
** Локальное уведомление с помощью трех кнопок для iOS8 +
// Кнопка: Я ПОЛУЧИЛ, НАПОМИНАТЬ ПОЗЖЕ, ПРОПУСТИТЬ **
источник