2012-10-25 16 views
6

Mam problem z jednym z aspektów zarządzania LocalNotifications - usunięcie jednego powiadomienia w iOS 6.Usuwanie LocalNotifications z NotificationCenter (iOS 6)

enter image description here

Jestem w stanie stworzyć LocalNotification o zawartości tekstowej i ognia Data i to działa.

W systemie iOS 5 powiadomienie pojawia się jako AlertView na ekranie głównym za pomocą dwóch przycisków i znika po dotknięciu dowolnego z nich. Mogę anulować ostrzeżenie powiadomienia, używając [[UIApplication sharedApplication] cancelLocalNotification:theNotification]. Nie ma problemu tutaj.

W systemie iOS 6 powiadomienie pojawia się w centrum notacji, jak pokazano powyżej po uruchomieniu. Jeśli anuluję to przy użyciu [[UIApplication sharedApplication] cancelLocalNotification:theNotification], nie uruchomi się - działa. Ale po to odpala ...

Mój problem:

nie jestem w stanie wymazać ten pojedynczy zwolniony zawiadomienie od centrum powiadomień. Na przykład chciałbym, aby powiadomienie zniknęło po dotknięciu lub po wykonaniu jakiejś czynności wewnątrz aplikacji.

Co próbowałem:

  • użyciu [[UIApplication sharedApplication] cancelLocalNotification:theNotification] - anuluje ogień zgłoszenia (w rzeczywistości nie ma takiej potrzeby, ponieważ zgłoszenie zrobił już ogień), ale nie kasuje zwolniony zawiadomienie od centrum powiadomień
  • usuwanie elementów z tablicy [[UIApplication sharedApplication] scheduledLocalNotifications] - nie działa, ponieważ ta funkcja zawsze zwraca pustą tablicę, bez względu na to, ile (pracujących!) powiadomień jest ustawionych (czy ktoś wie dlaczego?)

Co robię teraz

jestem usuwając wszystkie powiadomienia za pomocą [[UIApplication sharedApplication] cancelAllLocalNotifications] - anuluje je i usuwa z centrum powiadomień, a następnie utworzyć je z powrotem, bez jednego chciałem wymazać.

Jak widać, jest to raczej idiotyczne i zbędne rozwiązanie, ale nie udało mi się znaleźć lepszego rozwiązania.

Wszelkie sugestie?

+0

Dzięki @deleteme. Zajmuję się tym problemem. Czytając twoje pytanie, zdajesz sobie sprawę, dlaczego dostaję pustą tablicę, gdy wołam '[[UIApplication sharedApplication] scheduleLocalNotifications]'. Chyba na razie skorzystam z twojego rozwiązania. – IgniteCoders

Odpowiedz

1

Spróbuj tego ..... Może to być pomoc ... Napisz ten kod, z którego chcesz usunąć wszystkie powiadomienia.

   [[UIApplication sharedApplication] setApplicationIconBadgeNumber:1]; 
    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; 
    [[UIApplication sharedApplication] cancelAllLocalNotifications]; 

Aby usunąć jedno powiadomienie

można uzyskać tablicę planowanym zawiadomienie od: @property(nonatomic,copy) NSArray *scheduledLocalNotifications

Pobierz jeden chcesz, numer indeksu w wybranym miejscu, a następnie przekazać UILocalNotification * do - (void)cancelLocalNotification:(UILocalNotification *)notification.

Możesz zapisać unikalną wartość klucza w informacjach o Twoim lokalnym powiadomieniu. Pobierz całe lokalne powiadomienie, przeprowadź pętlę w tablicy i usuń konkretne powiadomienie.

Kod następująco,

UIApplication *app = [UIApplication sharedApplication]; 
NSArray *eventArray = [app scheduledLocalNotifications]; 
for (int i=0; i<[eventArray count]; i++) 
{ 
    UILocalNotification* oneEvent = [eventArray objectAtIndex:i]; 
    NSDictionary *userInfoCurrent = oneEvent.userInfo; 
    NSString *uid=[NSString stringWithFormat:@"%@",[userInfoCurrent valueForKey:@"uid"]]; 
    if ([uid isEqualToString:uidtodelete]) 
    { 
     //Cancelling local notification 
     [app cancelLocalNotification:oneEvent]; 
     break; 
    } 
} 
+0

Wiem, jak usunąć wszystkie powiadomienia (jestem pewien, że to wskazałem). Moim celem jest usunięcie jednego konkretnego powiadomienia. – deleteme

+0

Sprawdź i zaktualizuj moją odpowiedź ......., aby usunąć pojedyncze powiadomienie. – Wolverine

+0

Aktualizuję również przykładowy kod źródłowy w mojej odpowiedzi ..... może pomóc ... – Wolverine