Swiftで遊ぼう! - 628 - CoreDataDemo3 - 10 - NSFetchedResultsController 2
- Swiftで遊ぼう!の前書き-> Life-LOG OtherSide
- Swift2.1 & Xcode7.1対応の日本語版アップルチュートリアル!
- Table View実装チュートリアルをXcode7.2.1で解説
- Core Data シンプルチュートリアル
- 私の本業、オフィシャルなブログ-> Life-LOG
NSFetchedResultsControllerを組み込んだTableViewをコーディングしています。
アプリが一番最初に立ち上がった時にデータベースからデータを読み込むメソッドを用意します。
viewDidLoad()メソッド内にコードされている「loadData()」です。
func loadData() { let delegate = UIApplication.sharedApplication().delegate as! AppDelegate let context = delegate.managedObjectContext let request = NSFetchRequest(entityName: "Student") let sort = NSSortDescriptor(key: "name", ascending: true) request.sortDescriptors = [sort] results = NSFetchedResultsController(fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil) try! results.performFetch() }
このコードの前半部分は理解できているので説明は要りませんね*1。NSFetchRequestに絞り込みのNSPredicateのちょっとした使い方も学びました。そして今日はソーティングの基本となるNSSortDescriptorの使い方も知りました。ascendingに「true」を渡せば、「name」キーを文字コードの順番で並び変えます。日本語の場合ちょっとした工夫は必要です。
日本語の名前でソーティングしたい場合、かならず「ふりがな」を用意しないといけないでしょう。
次は変数resultsの初期化ステップです。
results = NSFetchedResultsController(fetchRequest: request, managedObjectContext: context, sectionNameKeyPath: nil, cacheName: nil)
NSFetchResultsControllerをインスタンス化する場合、4つの引数を必要とします。最初のパラメータはNSFetchRequestです。これは説明の必要がありませんね。次のNSMnaagedBojectContextはデータの編集、保存、読み出し、削除の担当なので欠かせません。NSFetchedResultsControllerは読み出した結果を扱うだけです。
「sectionNameKeyPath」はTableViewCellでグルーピングしてセクション表示させるアトリビュートを設定します。名前をソートしたときに「あ」「い」とかカテゴライズする時に利用できます。「cacheName」もデータベースが巨大になった時にアトリビュートをキャッシュしてパフォーマンスを維持させるために使います。
そして、「performFetch()」メソッドを使ってデータを読み込みます。
今日はここまで。