2015-02-26 9 views
5

Próbowałem zaimplementować blok zakończenia pobierania bez powodzenia. Ilekroć wysyłam APN, xcode wciąż narzeka, że ​​nie jest zaimplementowane. Oto mój koddidReceiveRemoteNotification: fetchCompletionHandler: ale program obsługi zakończenia nigdy nie był nazywany

func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 

    println("2. User Data", userInfo) 

    completionHandler(UIBackgroundFetchResult.NewData) 

} 

i ostrzeżenie Dostaję w konsoli xcode jest to

Warning: Application delegate received call to -application:didReceiveRemoteNotification:fetchCompletionHandler: but the completion handler was never called. 

Nie wiem, czy jestem wdrożenie właściwej składni tutaj

+1

Usuń plik println lub zmień go na NSLog, a następnie spróbuj ponownie. Jeśli to nie zadziała, zawiń obiekt completionHandler w bloku wysyłkowym i prześlij go do kolejki w tle (nie głównego wątku), więc nazywa się AFTER, gdy ta metoda zwraca. –

+0

@DavidH Nie widziałem już ostrzeżenia, gdy zastąpiłem 'println' przez' NSLog'. Dzięki! –

Odpowiedz

8

Usuń plik println lub zmień go na NSLog, a następnie spróbuj ponownie. Najprawdopodobniej problem jest spowodowany, ponieważ ta metoda pojawia się w tle, a nie w głównym wątku. println jest znacznie prostsze niż NSLog, który jest bezpieczny dla wątków i hartowany przez wiele lat.

+0

Dzięki David. Ta informacja nie jest oczywista dla nowych deweloperów iOS. –

+0

Tak naprawdę zgadłem - cały czas używam tej metody, ale nigdy nie widziałem tego błędu. Mnóstwo skarg na println, ponieważ nie jest to wątek. Jeśli przeszukasz okolice SO, zobaczysz, że wiele osób owija println w swoje własne opakowanie, aby uzyskać wydruk na głównym wątku. –

0

Nie wiem dlaczego, ale zastępując println z NSLog rozwiązało problem.

1

Miałem dokładnie ten sam problem, ale zupełnie inne rozwiązanie. Mój problem polega na tym, że zaimportowałem Intercom, dzięki czemu użytkownicy mogą czatować w aplikacji i wygląda na to, że przechwytują powiadomienia, a didReceiveRemoteNotification nigdy nie został wywołany w moim AppDelegate.

Mogę w końcu przestać walić głową o ścianę, mam nadzieję, że to uratuje czyjś czas.

Powiązane problemy