Dans le cadre de l'opération de synchronisation, je prends beaucoup de données de l'API en utilisant l'objet NSSession tel que recommandé par this answer:IOS: Après l'appel de l'API, les mises à jour des données de base peuvent-elles être effectuées dans le thread d'arrière-plan?
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *data = [session dataTaskWithURL:dataUrl completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
// use `Data` here
if (data !=nil) {
[self processData:data];//this currently includes saving to CoreData
}
// finally, any UI/model updates should happen on main queue
dispatch_async(dispatch_get_main_queue(), ^{
//do what you want with data
NSLog(@"back in main queue");
if (data==nil) {
NSLog(@"no data from api");
}
else {
[self.tableView setNeedsDisplay];
[self.tableView reloadData];
}
});
}];
[data resume];
Ma question est, est-il correct d'enregistrer les données à CoreData dans le fil d'arrière-plan, ou est-il préférable de le faire dans le bloc d'achèvement/thread principal? En ce moment je le fais dans le fil de fond. Cependant, il y a un long délai avant que la tableview se charge complètement et dans le cadre du dépannage, il m'est apparu que cela pourrait être le problème.
Nous vous remercions de votre suggestion.
Ok. On dirait un ours. Je fais beaucoup de traitement, donc je vais devoir passer beaucoup de temps à déterminer quel MOC est utilisé. – Arjun
Pour confirmer, processData devrait aller où montré ci-dessus? – Arjun
Bon, travailler avec plusieurs GPM peut être pénible. Mais déterminer qui est utilisé est facile, car chaque MO a une référence (faible) à son MOC. Donc, sauf si vous avez libéré votre MOC, vous pouvez simplement vous référer au MOC de n'importe quel MO donné. –