Swiftで遊ぼう! on Hatena

あしたさぬきblogでやってた初心者オヤジのiOSプログラミング奮闘記がHatenaに来ました

Swiftで遊ぼう! - 628 - CoreDataDemo3 - 10 - NSFetchedResultsController 2

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」キーを文字コードの順番で並び変えます。日本語の場合ちょっとした工夫は必要です。

f:id:yataiblue:20160326133453j:plain

日本語の名前でソーティングしたい場合、かならず「ふりがな」を用意しないといけないでしょう。

次は変数resultsの初期化ステップです。

results = NSFetchedResultsController(fetchRequest: request,
      managedObjectContext: context, 
         sectionNameKeyPath: nil, cacheName: nil)

NSFetchResultsControllerをインスタンス化する場合、4つの引数を必要とします。最初のパラメータはNSFetchRequestです。これは説明の必要がありませんね。次のNSMnaagedBojectContextはデータの編集、保存、読み出し、削除の担当なので欠かせません。NSFetchedResultsControllerは読み出した結果を扱うだけです。
sectionNameKeyPath」はTableViewCellでグルーピングしてセクション表示させるアトリビュートを設定します。名前をソートしたときに「あ」「い」とかカテゴライズする時に利用できます。「cacheName」もデータベースが巨大になった時にアトリビュートをキャッシュしてパフォーマンスを維持させるために使います。

そして、「performFetch()メソッドを使ってデータを読み込みます。

今日はここまで。

*1:こんな事が言えるレベルになってるんですよ。iOS開発初心者の人にはさっぱりかも(^_^;