*目次 [#e86b220c]
#contents

*プロジェクトの作成 [#z2dcfcca]
-プロジェクトの新規作成で、Empty Projectを選ばないとだめ。
-既存プロジェクトに追加する方法に関しては以下を参照のこと。
--[[Adding Core Data Existing iPhone Projects « Wires Are Obsolete:http://wiresareobsolete.com/wordpress/2009/12/adding-core-data-existing-iphone-projects/]]
--[[iphone - Adding Core Data to existing project in XCode 4 - Stack Overflow:http://stackoverflow.com/questions/6821719/adding-core-data-to-existing-project-in-xcode-4]]
*構成要素 [#d1072375]

**Persistent store [#vbafd56c]
-バックエンド。SQLite3とか。
**Data model [#vbbe47c1]
-テーブルスキーマ。
-Xcodeのデータモデルエディタで作る。.xcdatamodeldに保存される。
-Object-CのクラスとしてはNSManagedObjectModelに対応。
#pre{{
- (NSManagedObjectModel *)managedObjectModel {
    
    if (managedObjectModel_ != nil) {
        return managedObjectModel_;
    }
    NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"CoreData" ofType:@"momd"];
    NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
    managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];    
    return managedObjectModel_;
}
}}
**Persistent store coordinator[#sebef938]
-Persistent storeとData modelを使ってManaged objectとを作り出す。
#pre{{
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
    
    if (persistentStoreCoordinator_ != nil) {
        return persistentStoreCoordinator_;
    }
    
    NSURL *storeURL = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"CoreData.sqlite"]];
    
    NSError *error = nil;
    persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
    if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
        NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
        abort();
    }    
    
    return persistentStoreCoordinator_;
}
}}
-Managed object contextで管理される。
**Managed object and managed object context[#fbd24cdf]
-Managed ObjectsはDTO(みたいなもんか)。
-Key-Value Coding対応。
 NSDate* t = [managedObject valueForKey:@"updateDate"]
-Managed Object ContextはManaged Objectsを管理する。Persistent store coordinatorを使う。
**Fetch requerst [#xd1bab7c]
-条件を駆使してオブジェクトを取り出す。

*データモデルエディタ [#h63a8f51]
**起動方法 [#y43d24aa]
.xcdatamodelをクリックすると起動する。

**エンティティ [#s15a1061]
-テーブルに該当。
-左上のペインで追加削除できる。

**プロパティ [#d76f1b07]
-テーブルのカラムに該当。
-選択されたテーブルのカラムが一覧表示される。

**属性 [#db5d984a]
-カラムの型に該当。
-選択されたカラムの属性が表示される。

*Fetch Results Controller [#wd025de2]
-NManagedObjectsを管理されているオブジェクトを表示したり削除したりするのを助けるcontroller。
-イベントが発生するとdelegateメソッドが呼び出されるのでそこでビューを更新したりする。


*Tips [#k8ff30ec]
**transientプロパティの使いどころって? [#i332cdfd]
-NSManagedObjectObjectを継承したモデルクラスで一時的なプロパティに対して、transientプロパティを使うらしい。Undoサポートや初期化処理なんかを考えない場合通常の@propertyを使っても問題なさそう。[[core data - NSManagedObject: Should I use transient or a regular @property? - Stack Overflow:http://stackoverflow.com/questions/8690831/nsmanagedobject-should-i-use-transient-or-a-regular-property]]


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS