2
NSFetchedResultsControllerによってコアデータ要求が行われています。このコードの予想される結果は、UIActivityIndicator
startAnimating
となり、インジケータが `stopAnimating 'する前に呼び出しが完了してからテーブルを返すことになります。NSFetchedResultsControllerがフェッチを終了する前に、UIActivityIndicatorがアニメーションを停止する
実際には、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];
?
テーブルビューのリロード処理で非同期処理が実行されていますか?概念的には、テーブルの 'reloadData'とほぼ同じ時間に' stopAnimating'を呼び出すようにしたいと思っています。明らかに、別の時に起こっています。または、このような奇妙な動作の原因となるその他の問題は、誤ってメインキュー以外のキューでUIの更新を行った場合です。 – Rob
コアデータはわかりませんが、フェッチ操作の完了/結果がそのデリゲートを介して示されている場合、fetchedResultsControllerで設定したデリゲートにstopAnimatingを移動する必要があると思われます。 – Gruntcakes
@DonaldTrumpatemyhamster yowは正しかった、あなたがそれを答えにするなら、私はそれを受け入れるだろう – DCIndieDev