2015-02-26 8 views
5

Ho cercato di implementare il blocco di completamento del recupero senza fortuna. Ogni volta che invio un APN, xcode si lamenta ancora che non è implementato. Ecco il mio codicedidReceiveRemoteNotification: fetchCompletionHandler: ma il gestore di completamento non è mai stato chiamato

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

    println("2. User Data", userInfo) 

    completionHandler(UIBackgroundFetchResult.NewData) 

} 

e l'avviso io sono sempre nella console Xcode è presente

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

Non sono sicuro se io sono l'attuazione sintassi proprio qui

+1

Rimuovere il println o modificarlo in un NSLog, quindi riprovare. Se ciò non funziona, quindi avvolgere il completamentoHandler in un blocco di invio e inviarlo ad una coda di background (non al thread principale), quindi viene chiamato DOPO che questo metodo restituisce. –

+0

@DavidH Non ho più visto l'avviso quando ho sostituito 'println' con' NSLog'. Grazie! –

risposta

8

Rimuovere il println o modificarlo in un registro NS, quindi riprovare. Molto probabilmente il problema è causato dal fatto che questo metodo viene da te in background e non sul thread principale. println è molto più semplice di NSLog, che è thread-safe e è stato indurito per anni e anni.

+0

Grazie David. Quel pezzo di informazioni non è ovvio per i nuovi sviluppatori iOS. –

+0

In realtà ho indovinato: utilizzo sempre questo metodo, ma non ho mai visto quell'errore. Un sacco di lamentele su println perché non è thread save. Se cerchi su SO, vedrai che molte persone stanno avvolgendo println nel proprio wrapper in modo da ottenere l'output sul thread principale. –

0

Non so perché, ma sostituendo println con NSLog risolto il problema.

1

Avevo esattamente lo stesso problema ma una soluzione completamente diversa. Il mio problema è che ho importato Intercom in modo che le persone possano chattare in-app, e sembra come se intercettasse le notifiche e il numero didReceiveRemoteNotification non è mai stato chiamato nel mio AppDelegate.

Posso finalmente smettere di sbattere la testa contro il muro, spero che questo possa salvare il tempo di qualcuno.

Problemi correlati