2

NSFetchedResultsControllerによってコアデータ要求が行われています。このコードの予想される結果は、UIActivityIndicatorstartAnimatingとなり、インジケータが `stopAnimating 'する前に呼び出しが完了してからテーブルを返すことになります。NSFetchedResultsControllerがフェッチを終了する前に、UIActivityIndi​​catorがアニメーションを停止する

実際には、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

テーブルビューのリロード処理で非同期処理が実行されていますか?概念的には、テーブルの 'reloadData'とほぼ同じ時間に' stopAnimating'を呼び出すようにしたいと思っています。明らかに、別の時に起こっています。または、このような奇妙な動作の原因となるその他の問題は、誤ってメインキュー以外のキューでUIの更新を行った場合です。 – Rob

+0

コアデータはわかりませんが、フェッチ操作の完了/結果がそのデリゲートを介して示されている場合、fetchedResultsControllerで設定したデリゲートにstopAnimatingを移動する必要があると思われます。 – Gruntcakes

+0

@DonaldTrumpatemyhamster yowは正しかった、あなたがそれを答えにするなら、私はそれを受け入れるだろう – DCIndieDev

答えて

1

フェッチ結果が終了したときに呼び出されるデリゲートを設定しています。 stopAnimating呼び出しをそのデリゲートに移動する必要があります。

関連する問題