2015-02-26 20 views
5

Ich habe versucht, den Abruf Abschluss Block ohne Glück zu implementieren. Immer wenn ich einen APN sende, beschwert sich xcode immer noch, dass es nicht implementiert ist. Hier ist mein CodedidReceiveRemoteNotification: fetchCompletionHandler: aber der Completion-Handler wurde nie aufgerufen

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

    println("2. User Data", userInfo) 

    completionHandler(UIBackgroundFetchResult.NewData) 

} 

und die Warnung, die ich in der Xcode-Konsole bin immer ist dies

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

nicht sicher, ob ich Umsetzung bin die richtige Syntax hier

+1

Entfernen Sie die Println oder ändern Sie sie in einen NSLog, und versuchen Sie es erneut. Wenn das nicht funktioniert, wickeln Sie den completionHandler in einen Dispatch-Block und senden Sie ihn an eine Hintergrundwarteschlange (nicht an den Hauptthread), sodass er NACH dem Zurückgeben dieser Methode aufgerufen wird. –

+0

@DavidH Ich habe die Warnung nicht mehr gesehen, als ich 'println' durch' NSLog' ersetzt habe. Vielen Dank! –

Antwort

8

Entfernen Sie den Ausdruck oder ändern Sie ihn in einen NSLog, und versuchen Sie es erneut. Wahrscheinlich liegt das Problem daran, dass diese Methode im Hintergrund und nicht im Hauptthread auftritt. println ist viel einfacher als NSLog, das seit vielen Jahren thread-sicher und gehärtet ist.

+0

Danke David. Diese Information ist für die neuen iOS-Entwickler nicht offensichtlich. –

+0

Ich nahm tatsächlich eine Vermutung - ich benutze diese Methode die ganze Zeit, aber sah nie diesen Fehler. Viele Beschwerden über println, weil es nicht Thread-sicher ist. Wenn Sie auf SO suchen, werden Sie sehen, dass viele Leute println in ihren eigenen Wrapper einpacken, so dass sie im Hauptthread ausgegeben werden. –

0

nicht sicher, warum, aber unter Ersatz println mit NSLog löste das Problem.

1

Ich hatte genau das gleiche Problem, aber eine völlig andere Lösung. Das Problem von mir ist, dass ich importiert Intercom, so dass Leute in-App chatten können, und scheint wie es die Benachrichtigungen abfängt und die didReceiveRemoteNotification nie in meinem AppDelegate aufgerufen wurde.

Ich kann endlich aufhören, meinen Kopf gegen die Wand zu schlagen, ich hoffe, das kann jemand Zeit sparen.

Verwandte Themen