J'ai besoin d'effectuer certaines opérations de manière séquentielle. De nombreux objets sont conformes à un protocole (avec une méthode, c'est-à-dire execute()) insérée dans un tableau dans l'ordre d'exécution.Effectuer un lot d'opérations avec une interaction de l'utilisateur au milieu de chaque
Tout semble simple à l'aide GCD avec quelque chose comme:
dispatch_queue_t serialQuele = dispatch_queue_create("myQueue", NULL);
for (id <ExecutableProtocol> exec in executables)
{
dispatch_async(serialQuele, ^{
[exec executeWithCompletionBlock:^(NSString *name, Status *state) {
[self.executeResults setObject:state forKey:name];
dispatch_async(dispatch_get_main_queue(), ^{
if (self.delegate)
[self.delegate didExecuted: exec withResult:state userInfo:userInfo];
});
}];
});
}
L'idée semble bonne, mais si un exécuteur demande à l'utilisateur une question avec un UIAlertController ... l'exécuteur testamentaire suivant ne peut pas montrer sa boîte de dialogue aussi avec UIAlertController parce que l'utilisateur n'a pas encore répondu à la question et la boîte de dialogue précédente est toujours affichée.
Comment puis-je réaliser ce à quoi je m'attendrais?
Merci.
Merci Lev mais comme vous l'avez suggéré l'interface utilisateur est le gel ... sur le journal que j'ai vu tous les éléments sont exécutés, mais l'interface est arrêté sur le premier élément et l'utilisateur ne peut pas répondre parce que tout est bloque. – jerrygdm
C'est étrange. J'ai du mal à voir pourquoi. Il bloquerait les appels 'dispatch_sync (dispatch_get_main_queue(),^{...})' dans la méthode 'didExecuted: withResult: userInfo', mais je suppose que vous l'avez vérifié. –
à l'intérieur de la méthode didExecuted, il n'y a qu'un seul reloadData d'une collection ... – jerrygdm