2

У меня есть запрос данных ядра, который выполняется через NSFetchedResultsController. Ожидаемый результат этого кода заключается в том, что UIActivityIndicator будет startAnimating, вызов будет выполнен, завершен, а затем вернут таблицу, прежде чем индикатор «остановится».UIActivityIndicator останавливает анимацию перед NSFetchedResultsController завершает выборку

На самом деле происходит то, что функция возвращается до того, как NSFetchedResultsController получает любую информацию и/или повторно заполняет TableView. stopAnimating называется почти мгновенно, а затем только позже загружается таблица.

Мой код, как показано ниже:

[_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]; 

Что я делаю неправильно?

+0

Выполняется ли перезагрузка обработки табличного представления, выполняющего что-либо асинхронное? По идее, вы просто хотите убедиться, что вы вызываете 'stopAnimating' примерно в то же время, когда вы вызываете' reloadData' на столе, и, по-видимому, они происходят в разное время. Или другая проблема, которая может вызвать такое странное поведение, заключается в том, что вы случайно сделали некоторые обновления пользовательского интерфейса в очереди, отличной от основной очереди. – Rob

+0

Я не знаю основных данных, но я подозреваю, что вам нужно переместить stopAnimating в делегат, который вы установили на fetchedResultsController, если завершение/результаты выполнения выборки указаны через этот делегат. – Gruntcakes

+0

@ DonaldTrumpatemyhamster yow были правы, если вы сделаете это в ответ, я соглашусь с ним – DCIndieDev

ответ

1

Вы устанавливаете делегат, который вызывается, когда результаты выборки завершены. Вам нужно переместить вызов stopAnimating этому делегату.