2011-02-11 14 views
17

Mam naprawdę irytujące problemy z UILocalNotification.UILocalNotification w ogóle nie działa

Podczas kończenia prawie ukończonej aplikacji zauważyłem, że nie mogę uzyskać lokalnych powiadomień, niezależnie od tego, co próbowałem.

Więc zamiast marnować czas, postanowiłem wrócić do podstaw i zobaczyć, czy mogę w ogóle je uruchomić.

stworzyłem aplikację rzutem na bazie nowego Xcode i zastąpione -viewDidLoad z tym:

- (void)viewDidLoad 
{ 
    UILocalNotification * theNotification = [[UILocalNotification alloc] init]; 
    theNotification.alertBody = @"Alert text"; 
    theNotification.alertAction = @"Ok"; 
    theNotification.fireDate = [NSDate dateWithTimeIntervalSinceNow:10]; 

    [[UIApplication sharedApplication] scheduleLocalNotification:theNotification]; 
} 

jednak, że również nic nie robi w ogóle.
Oczekiwano wyświetlenia powiadomienia 10 sekund po uruchomieniu aplikacji, ale nic się nie wyświetla.
Testowałem to również na moim telefonie iPhone i symulatorze.

Czy brakuje mi czegoś bardzo ważnego tutaj? (Rozglądałem się za pośrednictwem dokumentacji firmy Apple i nie mógł znaleźć niczego, dlaczego tak się dzieje)

Dzięki

Odpowiedz

43

UILocalNotification s wyświetlane są tylko automatycznie nie jeśli aplikacja jest uruchomione (lub bieganie w tle). Jeśli aplikacja jest uruchomiona i uruchamiane jest powiadomienie lokalne, wywoływana jest metoda UIApplicationDelegate- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification, a system nie wyświetla niczego (ani nie odtwarza dźwięku). Jeśli chcesz wyświetlić powiadomienie, stwórz samemu UIAlertView w metodzie delegatów.

+1

Perfect. Dziękuję bardzo. –

+0

Zakładam, że nie ma sposobu na zmianę tego zachowania? Centrum powiadomień to świetny sposób wyświetlania informacji dla mojego użytkownika na temat asynchronicznych zdarzeń komunikacyjnych, które występują podczas działania aplikacji. – David

+0

Tylko uwaga na inny problem, na który należy zwrócić uwagę ... jeśli ustawisz parametr strefy czasowej, który zadziała, gdy alarm wyłączy się zgodnie z oczekiwaniami ... jednak jeśli ustawisz go jawnie na UTC, aby uniknąć stref czasowych, może nie robić tego, co Ty może się spodziewać, ponieważ nadal modyfikuje zwolnienie z UTC do UTC, ale jakoś inaczej. Zauważyłem, że alert nie został nigdy wywołany podczas ustawiania parametru strefy czasowej UTC, więc ustawienie go z powrotem na zero i upewnienie się, że czas UTC w przypadku pożaru był prawidłowy, naprawił problem. – sradforth

15

Wystarczy komentarz z moich przygodach w głupocie ...

miałem ten sam problem, ale moim problemem było to, że zapomniał przypisać wartość alertBody. Jeśli nie ustawisz alertBody, powiadomienie nie zostanie wyświetlone.

+0

Od dawna polowałem na ten "błąd"! Dziękuję Ci! Spodziewam się przynajmniej ostrzeżenia, ponieważ z pewnością nie należy planować pustego, niemożliwego do wyświetlenia powiadomienia. – Gerard

+1

Przywrócone szczęście :) – Ramesh

+0

OMG, @conarch, uratowałeś mój dzień :) Jestem też facetem tego rodzaju :) Dzięki za wskazanie tego. –

13
  1. the fireDate musi być czas przyszły.
  2. Aplikacja musi być uruchomiona w tle lub jest zamknięta.
  3. jeszcze jedno, nie zapomnij pokazać zapytanie, czy zezwolić na impuls, dodaj poniżej kod do AppDelegate:

    -(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { 
        if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) { 
         UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound categories:nil]; 
         [application registerUserNotificationSettings:settings]; 
        } 
    } 
    
+0

Proszę sformatować kod w swojej odpowiedzi – Anton

+2

Nie, gdzie w [Dokumentacja Apple] (https://developer.apple.com/library/ios/documentation/iPhone/Reference/UILocalNotification_Class/index.html # // apple_ref/doc/uid/TP40009565-CH1-SW13), czy przeczytałem, że najpierw potrzebowałem zarejestrować się w 'UserNotificationSettings' dla aplikacji, która ma tylko Lokalne Powiadomienia. To mi pomogło, tak proste, jak mogłoby się wydawać. –

Powiązane problemy