0

_queue est un objet NSOperationQueue. Je télécharger une image au serveur en utilisant les éléments suivants:Comment effectuer une tâche d'arrière-plan lorsque cette vue a été supprimée de la pile de navigation

[_queue addOperationWithBlock:^{ 
    //POST request used to upload photo to server 
    //request has already been successfully configured before this step 
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
}]; 

Cela peut prendre quelques secondes et si j'appuie sur le bouton de retour sur le contrôleur de navigation la connexion se ferme et la et image ne sera pas télécharger. Comment faire pour que cette tâche d'arrière-plan se produise même si le contrôleur de vue est retiré de la pile de navigation?

Je sais que sendSynchronousRequest a été déprécié, je vais corriger cela éventuellement.

+1

Au lieu d'envoyer une requête synchrone en utilisant 'NSURLConnection', essayez' NSURLSessi on' avec une requête asynchrone. La requête synchrone bloquera son thread. La session est facile à utiliser, ne bloque pas les threads et conserve la file d'attente d'exécution pour vous. – clemens

Répondre

1

Probablement _queue est une variable membre du contrôleur de vue? Si tel est le cas, vous pouvez le modifier pour qu'il devienne une variable membre statique (pour changer sa durée de vie), mais il serait préférable de le déplacer vers une classe de modèle et de charger le modèle sur l'image. nom de votre contrôleur de vue
Ceci conduit à une meilleure conception, en particulier une fois qu'il devient asynchrone - l'image ce scénario:

- view controller A starts the upload 
- user navigates to view controller B 
- upload fails and you need to notify the user of the failure or retry the upload 
- now what? A started the upload but it no longer exists how do you notify the user or retry the upload? 

Si vous le faites la responsabilité du modèle pour télécharger l'image alors ceci est la situation:

- view controller A starts the upload 
- user navigates to view controller B 
- upload fails and you need to notify the user or retry 
- model broadcasts a notification the upload has failed or just retires the upload 
- a meta view controller listens for the notification and displays a dialog to the user informing of the failure 
+1

Vous devriez éviter les variables statiques, et en particulier les requêtes synchrones. – clemens

+0

Merci beaucoup, déclarant que cela fonctionnait pour le moment. Je vais éventuellement le déplacer vers une classe de modèle. –

+4

@macmoonshine, j'ai dit "comme une solution rapide". c'est-à-dire pas une solution à long terme. – Gruntcakes