Swift NSFetchedResultsControllerの考察
NSFetchedResultsControllerについてまとめてみようと思う
NSFetchedResultsControllerを使うとCoreDataとUITableViewがとても便利になります。
実装例 frcImplはNSFetchedResultsControllerを実装(implement)していることを表す
/// FetchedResultsControllerインスタンス private var frcImpl: NSFetchedResultsController<T>! //ポイント //こうすることで.frcでNSFetchedResultsControllerへアクセス出来る var frc: NSFetchedResultsController<T> { get { return frcImpl } }
次へボタンが押されたときの処理
/// [次へ] @IBAction func nextDelivery(_ sender: Any) { //複数条件の判定 guard var border = uiRoutes.indexPathForSelectedRow?.row, //ofRoutesで型を決定->frcで詰め込み(getter)->fetchedObjectsで配列のfetch結果が返却される。 let clients = ofRoutes.frc.fetchedObjects else { return }
guard 複数条件の判定
アンラップした変数をスコープ外で利用します
カンマで区切って複数条件をチェックしつつアンラップできます。
長い処理の中での中断を判定する処理としてもguardを利用すべきです。
border, clients が条件のあと利用できます。アンラップされています。
clients CoreDataテーブルのDmClientをfetchした結果が配列で詰め込まれる
概念図
ofRoutes
/// 配達エリア一覧Table data source private var ofRoutes: ObservedFetchedRoutes! // MARK: 配達先Table data source fileprivate class ObservedFetchedRoutes: ObservedFetchedData<DmClient>,UITableViewDataSource {
ObservedFetchedRoutes
ObservedFetchedRoutes はObservedFetchedDataを継承 DmClientはcoredata のテーブル
ObservedFetchedData
CoreDataのfetchの値監視しているクラス
/// CoreDataの fetch と fetch後の変更監視、TableView への供給と自動更新を行う class ObservedFetchedData<T: NSManagedObject>: NSObject, NSFetchedResultsControllerDelegate {
NSFetchedResultsControllerDelegate はいろんなタイミングでfetch結果を返却してくれる
fetchedObjects
NSFetchedResultsControllerのプロパティでfetchした結果を配列で返却してくれる。
fetchしていないと、nilが返却される
これらをテーブルに表示していく。 つづく。