par exemple: i ont une fonctionСall un corps de bloc de la méthode dataTaskWithRequest toujours
-(void) someFunc:(NSString *) searchRequest {
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]];
[[session dataTaskWithRequest:request
completionHandler:^(NSData *data,NSURLResponse *response, NSError *error)
{
// body block
}
]
resume];
}
et je l'appelle someFunc dans:
- (IBAction)searchButtonPressed:(id)sender {
NSString * searchRequest = @"blablabla";
[self someFunc:searchRequest];
}
Dans ce cas, je me suis aperçu que le corps de le bloc est exécuté dans un thread séparé, ce qui entraîne une perte de données. Je veux que toutes les actions soient effectuées séquentiellement. Comment faire? Merci!
'someFunc:' ne devrait pas retourner une valeur, à l'intérieur 'completionHandler:^(NSData * données, NSURLResponse * réponse, NSError * erreur) { }]' J'analyse du fichier JSON url et magasin valeur dans la propriété de classe. Puis affichez dans tableview. Maintenant, il s'avère que les informations du fichier json ne se chargeront pas car l'analyse est effectuée avec un retard dans un thread séparé. – redisky
Si je comprends bien, le bloc est poussé sur la pile en attente. – redisky
Traitez les données dans le bloc d'achèvement, puis appelez l'achèvement fourni sur le thread principal avec les objets de modèle requis par la vue de table. – willbur1984