2013-10-07 31 views
5

Ich habe eine Situation, in der, wenn das Gerät eine Push-Benachrichtigung erhält, ich eine NSURLSession kombiniert mit einer NSURLConnection senden würde. Ich habe ein paar Fragen bezüglich NSURLSession.Wann wird NSURLSession ausgeführt?

Wird NSURLSession's Data Task automatisch im Hintergrund fortgesetzt, wenn die Internetverbindung unterbrochen wird?

Wird NSURLSession automatisch versucht, die Aufgabe abzuschließen, wenn anfangs kein Internet vorhanden ist, oder kehrt die Sitzung nur mit einem Fehler zurück?

+0

Wenn es eine Datenaufgabe ist, dürfen Sie nicht im Hintergrund laufen –

Antwort

3

Sieht so aus, als ob es an Ihnen liegt, die Wiederholung zu behandeln.

When any task completes, the NSURLSession object calls the delegate’s URLSession:task:didCompleteWithError: method with either an error object, or nil if the task completed successfully. If the task is a resumable download task, the NSError object’s userInfo dictionary contains a value for the NSURLSessionDownloadTaskResumeData key. Your app should use reachability APIs to determine when to retry, and should then call downloadTaskWithResumeData: or downloadTaskWithResumeData:completionHandler: to create a new download task to continue that download. Go to step 3 (creating and resuming task objects).

https://developer.apple.com/library/ios/documentation/cocoa/Conceptual/URLLoadingSystem/NSURLSessionConcepts/NSURLSessionConcepts.html

3

Does NSURLSession der Task Daten automatisch im Hintergrund wieder aufnehmen, wenn Internet-Verbindung verloren geht?

Wenn die Internetverbindung unterbrochen wird, erhalten Sie einen Fehler, NSURLErrorNetworkConnectionLost (Fehlercode: -1005), in der Delegate-Methode URLSession:task:didCompleteWithError. Sie sind dafür verantwortlich, die Sitzung mithilfe von invalidateAndCancel oder finishAndInvalidate erneut zu versuchen und/oder zu entwerten (obwohl dies im Fall eines Netzwerkverbindungsverlustes bereits geschehen ist).

Versucht NSURLSession automatisch, die Aufgabe abzuschließen, wenn anfangs kein Internet vorhanden ist, oder kehrt die Sitzung nur mit einem Fehler zurück?

Wenn keine Internetverbindung besteht, erhalten Sie in der Delegate-Methode URLSession:task:didCompleteWithError einen Fehler NSURLErrorNotConnectedToInternet (Fehlercode: -1009). Sie sind dafür verantwortlich, die Sitzung (falls erforderlich) mit invalidateAndCancel oder finishAndInvalidate zu entwerten (obwohl es im Fall einer fehlenden Internetverbindung bereits beendet ist).

Referenzen:

URL Loading System Programming Guide

Foundation Constants Reference

1

Wenn Sie Hintergrundkonfigurationen mit NSURLSession den Delegierten verwenden auf Erfolg/Misserfolg genannt wird, wenn Ihre Anwendung aktiv oder im Hintergrund ist. Die Aufgabe, die Sie erstellt werden zu einem Dämon des OS übergeben und Ihre App aufgeweckt wird oder sogar gestartet (wenn es von iOS getötet)

`application:handleEventsForBackgroundURLSession:completionHandler`: 

mit Und wenn alle Aufgaben der Sitzung Delegierte abgeschlossen wäre genannt mit

URLSessionDidFinishEventsForBackgroundURLSession: 

Weitere Details auf den Hintergrund Sitzung sind here

Sie auch Apfelbeispielcode here und suchen Sie nach "Simple background Transfer"

bekommen
Verwandte Themen