web-dev-qa-db-fra.com

Impossible d'accéder aux variables globales dans dispatch_async: "La variable n'est pas assignable (spécificateur de type _block manquant)"

Dans Mon code dispach_async block Je ne peux pas accéder à global variables. J'obtiens cette erreur Variable is not Assignable (missing _block type specifier).

NSString *textString;

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 
   (unsigned long)NULL), ^(void) {
        textString = [self getTextString];
});

Quelqu'un peut-il m'aider à découvrir la raison?

49
Vaquita

Vous devez utiliser le spécificateur __block lorsque vous modifiez une variable à l'intérieur d'un bloc, donc le code que vous avez donné devrait ressembler à ceci à la place:

 __block NSString *textString;
 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 
                                                 (unsigned long)NULL), ^(void) {
      textString = [self getTextString];
});

Les blocs capturent l'état des variables référencées à l'intérieur de leur corps, donc la variable capturée doit être déclarée mutable. Et la mutabilité est exactement ce dont vous avez besoin étant donné que vous définissez essentiellement cette chose.

137
CodaFi