2

Я пытаюсь поставить местное уведомление, это выглядит примерно так:какао: Уведомления пользователя не доставляется

NSUserNotification *notification = [[NSUserNotification alloc] init]; 
//set title, subtitle, and sound 
[[NSUserNotificationCenter defaultUserNotificationCenter] deliverNotification:notification]; 

Но уведомление не появляется. Я знаю, что иногда уведомления не отображаются, если приложение находится на передней панели, но на момент доставки это не так. В системных настройках я убедился, что уведомления из моего приложения разрешены, и я даже переопределил userNotificationCenter: shouldPresentNotification: метод всегда возвращает YES, но он все равно не представляет уведомления.

Что более всего смущает, так это то, что все работает нормально, пока я не обновился до Mavericks. Я полагаю, что что-то изменилось в обновлении, но я не могу понять, что.

Спасибо за помощь.

ответ

3

Я предполагаю, что что-то есть nil. убедитесь, что вы либо назначаете (действительный и не нуль) title, либо informativeText.

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

В вашей консоли есть сообщения об ошибках?

Используйте отладчик или операторы NSLog() для оценки значений, присвоенных уведомлению. Вы также можете увидеть эту проблему, если указатель NSUserNotification равен нулю (не из кода, который вы опубликовали, но стоит упомянуть).

Вот минимальный тест для приложения делегат, который работает на Mac OS X 10.9 (Mavericks):

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
    NSUserNotificationCenter* unc = [NSUserNotificationCenter defaultUserNotificationCenter]; 
    unc.delegate = self; 

    NSUserNotification* notice = [[NSUserNotification alloc] init]; 
    notice.title = @"title"; // notifications need a title, or informativeText at minimum to appear on screen 
    //notice.informativeText = @"informativeText"; 

    NSLog(@"notification: %@, notification center:%@", notice, unc); 
    [unc deliverNotification:notice]; 
} 

// The notifications will always dispaly even if we are in the foreground 
- (BOOL)userNotificationCenter:(NSUserNotificationCenter *)center shouldPresentNotification:(NSUserNotification *)notification 
{ 
    return YES; 
} 
+0

Да! Я явно не задавал название названия кнопки действия, Лев никогда не вызывал у меня проблем с этим, но, видимо, что-то изменилось. Благодаря! – Elbimio