ひとりまとめ

もろもろのメモ

NSFetchedResultsControllerを使ったテーブルでレコードを削除したい!

NSFetchedResultsControllerを使えばTableViewでの操作が楽と聞いてやってまいりましたが、表示したレコードの追加削除絡みがなんだかふわっとしてました・・・。なんかエラーも出るし・・・。

 

ようやく「そういうことか!」となったので、関連含めて覚え書き。

 

1:読み出しと追加などの操作は別!

データの取得はNSFetchedResultControllerを使って行い、追加・編集・削除といったCoreDataの操作はNSManagedObjectContextを通じて"普通の方法で"行う。

NSFetchedResultControllerを使ってなんかやるんだろーって思ってたら、ユーザー的には取り出し時の設定のみ。「勝手にNSManagedObjectContextを見張ってくれて、勝手に内容が更新される」というものでした。

 

2:編集するときはbeginUpdates/endUpdateをしろ!

これをさぼっててエラー*1が出ました。レコードのインデックス的なやつが追いきれなくなってしまうために、ちゅどんです。

– controllerWillChangeContent:で[self.tableView beginUpdates]をしておき、– controllerDidChangeContent:で[self.tableView endUpdates]するとよさげ。

 

これさえ守れば、最初にテーブルへデータを渡してしまえばほったらかしできました。

今のところ・・・。

 

iOS Core Data徹底入門

iOS Core Data徹底入門

 

 

 

*1:Exception was caught during Core Data change processing.とかなんとか