2016-07-30 4 views
0

Mein Code in Appdelegate für Hintergrund Abruf ist nie vollständig ausgeführt. Ich habe die Hintergrundfetch-Option eingeschaltet und die PLIST aktualisiert.iOS: Warum wird die Fetch-Hintergrundfunktion nie vollständig ausgeführt?

I auslösen den Code von Debug drücken> Hintergrund

Dies ist der Code

func application(application: UIApplication, performFetchWithCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) { 
     User.getNotifications(User.getUserDetails()["id"].string!, callback: {(notifications) in 
      //update notification badge count 
      notificationBadgeCount = X 
     }) 
} 

'User.getNotifications' wie folgt aussieht

getNotifications(id: String, callback...){ 
    alamofire.request(.GET....){ jsonResponse in 
     //GETS HERE 
    callback(jsonResponse) 
    } 

} 

Simulieren Fetch Wenn der simulierten Hintergrund auslösenden fetch, die alamofire-GET-Anfrage wird gesendet und Daten werden zurückgegeben (ich habe den Server überprüft und der Anruf wird gesendet), allerdings scheint die App bei (// GETS HIER) im ge suspendiert zu sein tNotifications aufrufen, so dass der Rest der Code im Hintergrund holen (// Update Benachrichtigung Abzeichen Anzahl) wird nie ausgeführt.

Der Code scheint Timeout. Ich soll 30s bekommen, aber es scheint in 5s oder so etwas zu haben.

Eine Idee, warum dieser Codeabschnitt nicht ausgeführt wird?

HINWEIS: Wenn ich die App manuell erneut öffne, wird der Rest des Codes ausgeführt.

+0

Sie haben nichts mit Ihrem 'completionHandler' gemacht. – jtbandes

Antwort

1

performFetch hat eine eingehende Funktion namens completionHandler. Sie müssen diese Funktion aufrufen, um den Abruf abzuschließen und den Countdown-Takt zu stoppen. Du machst das nicht und du hast somit ein Zeitlimit und die App ist gesperrt.

+0

Scheint so, als würde der Code nicht ohne ihn ausgeführt werden, danke! – google1254

Verwandte Themen