5

fetchedResultsControllers NSpredicate を変更した後 (およびフェッチを実行した後)、UITableView のセクションと行を更新する方法はありますか? searchBar の searchText が変更されたときに、controllerWillChangeContent デリゲート メソッドを使用してテーブルを更新したいと考えています。

現在、私のアプリでは、これらのデリゲート メソッドはコアデータの変更が発生したときにのみ呼び出されます。resultsController 述語を変更してフェッチを実行するときではありません。

各テキスト変更で[self.tableView reloadData]を呼び出すだけでは、アニメーションはなく、エクスペリエンスが少しブロックされます。

または、検索テキスト エントリの変更ごとに tableView の内容を更新するために、まったく別のことを行う必要がありますか?

4

4 に答える 4

8

Apple のドキュメントをもう一度調べたところ、述語が変更されたときに NSFetchedResultsControllerDelegate メソッドが呼び出されないようです。

NSFetchedResultsController のインスタンスは、このプロトコルのメソッドを使用して、コントローラーのフェッチ結果が追加、削除、移動、または更新操作によって変更されたことをデリゲートに通知します。

したがって、私自身の質問に答えるために: NSFetchedResultsController 述語が変更された後、NSFetchedResultsControllerDelegate を使用してテーブルを更新することはできません。

于 2011-01-02T11:09:47.983 に答える
0

NSFetchedResultsController クラスリファレンスから:

取得リクエストの変更

取得リクエストを単純に変更して結果を変更することはできません。取得リクエストを変更する場合は、次のことを行う必要があります。

キャッシュを使用している場合は、それを削除します (deleteCacheWithName: を使用)。通常、フェッチ リクエストを変更する場合は、キャッシュを使用しないでください。

取得リクエストを変更します。performFetch: を呼び出します。

述語を変更したため、もう一度 performFetch: を呼び出す必要があります。その後、デリゲートがそこからテーブルの更新を処理します。

于 2011-01-01T22:33:16.303 に答える
0

すべてのセクションでを渡すUITableViewメソッドを使用してみてください。そうすれば、すべてをリロードする必要がありますが、それでも選択したアニメーションを取得できます。reloadSections:withRowAnimation:NSIndexSet

行を追加および削除する場合は、 and を使用する必要がありinsertSections:withRowAnimation:ますremoveSections:withRowAnimation:。一度に多数の変更を行う場合は、 と の呼び出しの間にも行う必要がありbeginUpdatesますendUpdates

于 2011-01-01T18:25:49.813 に答える
0

[self.tableView reloadData]電話してみる

-(void)viewWillAppear:(BOOL)animated;
                 or
-(void)viewDidAppear:(BOOL)animated;
于 2011-01-01T15:22:31.353 に答える