2016-03-21 1 views
0

J'envoie la demande à l'aide des tâches, de cette façon:Comment pointer vers une tâche avec sa propre fermeture de complétions? ios rapide

let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in 

       dispatch_async(dispatch_get_main_queue(), { 

        //remove from queue 
        weakself?.popTask(task: task) 
    } 
} 

self.pushTask(task) 
task.resume() 

j'ai besoin de pousser la tâche dans une file d'attente avant de reprendre. alors j'ai besoin de l'éclater une fois que c'est fini. le problème que j'ai eu cette erreur: variable utilisée dans ses propres valeurs initiales

que dois-je faire? est-il possible de créer une tâche, puis de définir son gestionnaire de complétion?

Merci

Répondre

0

Je pense que vous avez raison que le bloc d'achèvement ne peut pas se référer à la tâche parce qu'il n'a pas encore été créé.

C'est ce que l'on entend par:

variables

utilisé au sein de son propre valeurs initiales

Pour contourner ce problème, il suffit de déclarer la constante avant de l'installer. par exemple.

let task: NSURLSession 
task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in 

      dispatch_async(dispatch_get_main_queue(), { 

       //remove from queue 
       weakself?.popTask(task: task) 
} 
+0

est-ce que cela crée retain_cycle? – david