NSFetchedResultsControllerを使ったテーブルでレコードを削除したい!
NSFetchedResultsControllerを使えばTableViewでの操作が楽と聞いてやってまいりましたが、表示したレコードの追加削除絡みがなんだかふわっとしてました・・・。なんかエラーも出るし・・・。
ようやく「そういうことか!」となったので、関連含めて覚え書き。
1:読み出しと追加などの操作は別!
データの取得はNSFetchedResultControllerを使って行い、追加・編集・削除といったCoreDataの操作はNSManagedObjectContextを通じて"普通の方法で"行う。
NSFetchedResultControllerを使ってなんかやるんだろーって思ってたら、ユーザー的には取り出し時の設定のみ。「勝手にNSManagedObjectContextを見張ってくれて、勝手に内容が更新される」というものでした。
2:編集するときはbeginUpdates/endUpdateをしろ!
これをさぼっててエラー*1が出ました。レコードのインデックス的なやつが追いきれなくなってしまうために、ちゅどんです。
– controllerWillChangeContent:で[self.tableView beginUpdates]をしておき、– controllerDidChangeContent:で[self.tableView endUpdates]するとよさげ。
これさえ守れば、最初にテーブルへデータを渡してしまえばほったらかしできました。
今のところ・・・。
*1:Exception was caught during Core Data change processing.とかなんとか