CoreData

               2012/05/31
           Kosuke Matsuda
iOSでSQLiteを利用する

• libsqlite3 (C library)
• Objective-C wrapper (FMDB)
• O/RM (ActiveRecord, MojoDatabase)
• CoreData
• CoreData + 3rd library (MagicalRecord)
CoreDataとは
• Core Data はモデルオブジェクトを永続
 化するためのフレームワークです。
      サルでもわかる Core Data 入門【概念編】(http://d.hatena.ne.jp/glass-_-onion/20111015/1318667971)




• Core Dataはメモリ上のオブジェクトグ
 ラフを操作するためのもの
                             Core Dataと(R)DBMSとは何が違うか?(http://macisv.jp/blog/?p=264)
CoreDataで利用する
  主なクラス
• NSPersistentStore
  永続ストア、データの保存先(主にSQLite、MacだとXMLとかも)


• NSPersistentStoreCoordinator
  NSPersistentStoreを管理


• NSManagedObjectContext
  データの検索や登録を管理する


• NSManagedObjectModel
  全エンティティ同士の関連を管理する
• NSManagedObject
  Modelオブジェクト。データ(レコード)


• NSEntityDescription
  各エンティティの定義を管理する(テーブル)


• NSFetchRequest
  検索条件を管理する
実際に利用するのは主に以下の4つ


• NSManagedObjectContext
• NSManagedObject
• NSEntityDescription
• NSFetchRequest
CoreDataを
実際に使う
• プロジェクトの作成
プロジェクトを作る時に Use Core Data を
選択する。
AppDelegate.{h,m}ファイルに自動生成されるコードを
そのまま利用する。

もし、既存プロジェクトであとからCoreDataを適用
する場合、自分でこのコードを書くのは難しいので
ダミープロジェクトを作ってからコードをコピペし
た方がよい。
• モデルクラスの作成
モデルクラスにattributeの設定
エンティティの設定
データの作成
データの検索
NSFetchedResultsController
• CoreDataから取得した結果セットを管
 理する。


• 主にUITableViewまたは
 UITableViewControllerと組み合わせて利
 用する。
まだほとんど試していないので省略
Pros & Cons
Pros
• スキーマ定義などをGUIで行える
• 永続データへの効率的なアクセス
• データストアのバージョン管理。自動
 マイグレート

• モデルオブジェクトの変更管理。アン
 ドゥとリドゥのサポート
Cons

•   規約、ルールが多い
    テーブル名やカラム名に"Z"がつく。メタデータテーブルやカラム
    に"Z_"がつく


•   マイグレートにかなり時間がかかる(らし
    い)
•   検索条件にNSPredicateオブジェクトを使用す
    るので、SQL文に慣れていると把握しづらい

    ただしNSArrayなどでも利用されるので使い方を知っておいても損は
    ない


•   NSFetchedResultsController1つに対して1つの
    エンティティにしか対応していない
補足:MagicalRecord


• MagicalRecord was inspired by the ease of
  Ruby on Rails' Active Record fetching.
                   https://github.com/magicalpanda/MagicalRecord
不要

Core Data