CoreDataの基礎 その1

2010/08/06

CoreDataの基礎 その1|CoreDataの基礎 その2|CoreDataの基礎 その3|CoreDataの基礎 その4

iphoneのデータ管理はSDK3.0になってからCoreDataが推奨となっている模様です。 もともと、AppleのWebObjectsってのを会社でやってて、「EO Modeler」と同じかな? SQLを書かなくてもデータモデルができると言うのは何となく想像はつきますが・・・。

キーバリューコーディング

まずデータオブジェクトを扱うのに出てくる「キーバリューコーディング」

NSString *name = [managedObject valueForKey:@"name"]; [managedObject setValue:@"Yoo" forKey:@"name"];

とデータストアから取り出したデータをkeyとvalueを取得、設定します。 CoreDataのデータストアタはデフォルトSQLiteです。 と言ってもSQLは原則書くことはありません。 ただ、データ設計に関してはリレーショナルデータベースの知識は多少必要かもしれません。

ちなみに、SQLiteのデータストアの場所をパーシステントストアと呼ぶようです。 CoreDataと仲介するオブジェクトはNSMnagedObjectContextです。 (WebObjectsだとEOEdtingContextにあたるものでしょうか?)

CoreDataプロジェクトを作成

では実際にプロジェクトを作成してみます。

Window-based Applicationを選んで、Use Core Data For storageにチェックを入れて作成するだけです。

すると、Resourcesに.xcdatamodelファイルが作成されます。

ファイルを開くとエディターらしきものが開きます。 おお!見た目だけで便利そうすねw

このエディタの使い方はまた後で書く事にして、コーディングの方をみていきます。

コーディング

Window-based Applicationの場合、ある程度の雛形で作成されますが、まずはヘッダーファイルからみていきます。

#import 
#import 

@interface SongAppDelegate : NSObject  {
    
    UIWindow *window;
    
@private
    NSManagedObjectContext *managedObjectContext_;
    NSManagedObjectModel *managedObjectModel_;
    NSPersistentStoreCoordinator *persistentStoreCoordinator_;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;

- (NSString *)applicationDocumentsDirectory;

@end

NSManagedObjectModel

オブジェクトデータモデルのことで、モデルファイルでEntityを管理する。 .xdatamodelそのものぽいけど、ファイルタイプはmomdのようです。

NSPersistentStoreCoordinator

NSManagedObjectContext(xdatamodel)から作成されるデータストレージ。 addPersistentStoreWithTypeで、データベースファイ、Data Storageの種類を選択することができる(SQLiteが一般的か?)

NSManagedObjectContext

NSManagedObjectModel、NSPersistentStoreCoordinatorから取得したデータオブジェクトをメモリ内で管理する。 実際にデータを操作する場合は、NSManagedObjectContextを介してコーディングすることになる(であろう)。

managedObjectContext_、managedObjectModel_、persistentStoreCoordinator_を隠蔽化して、各getterを用意しています。

次は実装ファイルをみてきます。

CoreDataの基礎 その1|CoreDataの基礎 その2|CoreDataの基礎 その3|CoreDataの基礎 その4