2

Une demande de données de base est effectuée via un NSFetchedResultsController. Le résultat attendu de ce code est qu'un UIActivityIndicatorstartAnimating l'appel sera fait, complet, et ensuite retournera la table, avant que l'indicateur 'arrête d'animer. Ce qui se passe réellement, c'est que la fonction retourne avant que NSFetchedResultsController ne reçoive des informations et/ou ne repeuple le TableView. stopAnimating est appelée presque instantanément, puis seulement la table se charge plus tard.UIActivityIndicator arrêtant l'animation avant la fin de l'extraction de NSFetchedResultsController

Mon code est comme ci-dessous:

[_loadingActivityIndicator startAnimating]; 

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"user"]; 
[fetchRequest setReturnsObjectsAsFaults:NO]; 

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"connection.userId matches %@", [NSString stringWithFormat:@"%@",currentUser.userId ]]; 
fetchRequest.predicate = predicate; 

fetchRequest.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"firstname" ascending:YES]]; 

self.fetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:appDelegate.coreDataStack.managedObjectContext sectionNameKeyPath:nil cacheName:nil]; 

self.fetchedResultsController.delegate = self; 

// Perform Fetch 
NSError *error = nil; 
[self.fetchedResultsController performFetch:&error]; 

if (error) { 
    NSLog(@"Unable to perform fetch."); 
    NSLog(@"%@, %@", error, error.localizedDescription); 
} 

[_loadingActivityIndicator stopAnimating]; 

Qu'est-ce que je fais mal?

+0

Le processus de rechargement de vue de table effectue-t-il quelque chose d'asynchrone? Conceptuellement, vous voulez juste vous assurer que vous appelez 'stopAnimating' à peu près en même temps que vous appelez' reloadData' sur la table, et apparemment ils se produisent à des moments différents. Ou, l'autre problème qui peut provoquer ce type de comportement étrange est si vous avez accidentellement fait certaines mises à jour de l'interface utilisateur dans une file d'attente autre que la file d'attente principale. – Rob

+0

Je ne connais pas les données de base, mais je suppose que vous devez déplacer le stopAnimating dans le délégué que vous avez défini dans fetchedResultsController si l'opération d'extraction/les résultats sont indiqués via ce délégué. – Gruntcakes

+0

@DonaldTrumpatemyhamster yow avaient raison, Si vous faites cela dans une réponse, je vais l'accepter – DCIndieDev

Répondre

1

Vous définissez un délégué qui s'appelle lorsque les résultats d'extraction sont terminés. Vous devez déplacer l'appel stopAnimating vers ce délégué.