2013-10-07 3 views
5

J'ai une situation dans laquelle lorsque l'appareil reçoit une notification push, j'enverrais un NSURLSession combiné avec un NSURLConnection. J'ai quelques questions concernant NSURLSession.Quand est-ce que NSURLSession s'exécute?

La tâche de données NSURLSession's reprend-elle automatiquement en arrière-plan en cas de perte de la connexion Internet?

Est-ce que NSURLSession essaie automatiquement de terminer la tâche s'il n'y a pas d'Internet initialement, ou la session revient-elle avec une erreur?

+0

Si c'est une tâche de données, vous n'êtes pas autorisé à exécuter en tâche de fond –

Répondre

3

On dirait que c'est à vous de gérer la nouvelle tentative.

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

données Tâche de Does NSURLSession reprendre automatiquement en arrière-plan, si la connexion Internet est perdue?

Si la connexion Internet est perdue, vous recevrez une erreur, NSURLErrorNetworkConnectionLost (code d'erreur: -1005), dans la méthode déléguée URLSession:task:didCompleteWithError. Vous êtes responsable de réessayer et/ou d'invalider la session en utilisant invalidateAndCancel ou finishAndInvalidate (il aura déjà fini dans le cas d'une perte de connexion réseau).

Est-ce que NSURLSession tente automatiquement de terminer la tâche s'il n'y a pas d'Internet initialement, ou si la session revient juste avec une erreur?

S'il n'y a pas de connexion Internet, vous recevrez une erreur, NSURLErrorNotConnectedToInternet (code d'erreur: -1009), dans la méthode déléguée URLSession:task:didCompleteWithError. Vous êtes responsable de l'invalidation de la session (si nécessaire) en utilisant invalidateAndCancel ou finishAndInvalidate (il sera déjà terminé en cas d'absence de connexion internet).

Références:

URL Loading System Programming Guide

Foundation Constants Reference

1

Si vous utilisez des configurations de fond avec NSURLSession les délégués s'appellent le succès/échec lorsque votre application est active ou en arrière-plan. La tâche que vous avez créé sont remis à un démon du système d'exploitation et votre application est waken ou même commencé (si elle a tué par iOS) en utilisant

`application:handleEventsForBackgroundURLSession:completionHandler`: 

Et quand toutes les tâches terminées votre délégué de la session serait appelé avec

URLSessionDidFinishEventsForBackgroundURLSession: 

Plus de détails sur la session de fond sont here

Vous pouvez également obtenir le code d'échantillon de pomme here et recherchez « Transfert d'arrière-plan simple »

Questions connexes