2015/07/10
Core Data で簡単な(例:書籍のタイトルと著者)データベースを作ってアクセスする方法を紹介する。
Xcode のメニューの File -> New... から Data Model をクリックして Data Model ファイルを作成。デフォルトのファイル名は Model.xcdatamodeld。
1) モデルファイルを選択
2) エンティテイ名を入力。この場合は "Book" 先頭は必ず大文字。
3) "+" をクリックしてアトリビュートを追加
4) アトリビュート名とタイプを入力。この場合は "auther" と "title"。必ず小文字。
View Controller に Table View をドラッグしてドロップ。
View Controller に Array Controller をドラッグしてドロップ。
ViewController.m に以下のコードを書いて、その IBOoulet とArray Controller を接続する。
IBOutlet NSArrayController *test_arrayController;
1) Assistant Editor を開いて2画面にする。
2) Storyboard で Array Contoroller を選択。
3) Array Controller の Referencing Outlet と View Controller の IBOutlet を接続。
1) Model を "Entity Name" にする。
2) Entitiy Name を入力。この場合は Model.cdatamodeld で設定した "Book"。
3) Preparres Content にチェック。
Table View の Content Mode を "Cell Based"にする。
1) タイトルのカラムを選択。この場合は "TITLE" "
2) Bind to "Array Controller" にチェック
3) Model Key Path に Model で設定した Attributeを設定。この場合は "title"
4) "AUTHOR" "
5) Bind to "Array Controller" にチェック
6) Model Key Path に Model で設定した Attributeを設定。この場合は "author"
レコードの追加と削除のボタン、データベースにセーブするボタンを Push Button で作る。
Array Controller の "add" とレコード追加ボタンを接続する。
Array Controller の "remove:" とレコード削除ボタンを接続する。
ViewController.m に 以下のコード書いてSAVE ボタンを接続。この状態ではSAVE できないが、後ほどコードを書き入れる。
- (IBAction)saveButton:(id)sender { }
ViewContorller.m に以下のコードを書く。
#import "ViewController.h" @interface ViewController () @property (nonatomic) NSManagedObjectContext *managedObjectContext; @end @implementation ViewController { IBOutlet NSArrayController *test_arrayController; } - (void)viewDidLoad { [super viewDidLoad]; NSError *error = nil; // Core Dataモデルファイルディレクトリの指定 NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"Model" withExtension:@"momd"]; NSManagedObjectModel* managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; // Core Dataのオブジェクト群の永続性を保証するNSPersistentStoreCoordinatorを扱うモデル情報 // NSManagedObjectModelを指定して作成 NSPersistentStoreCoordinator *coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:managedObjectModel]; // Core Dataが利用するファイルのパスを指定 ~/Documents/_deleteMe/NWCoreData.sqlite NSURL *storeURL = [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject]; storeURL = [storeURL URLByAppendingPathComponent:@"_deleteMe/NWCoreData.sqlite"]; // Persistent Store(永続ストア)設定 if (![coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { NSLog(@"ERROR in addPersistentStoreWithType %@", [error localizedDescription]); } self.managedObjectContext = [[NSManagedObjectContext alloc] init]; [self.managedObjectContext setPersistentStoreCoordinator:coordinator]; [test_arrayController setManagedObjectContext:self.managedObjectContext]; } - (IBAction)saveButton:(id)sender { NSError *error = nil; NSManagedObjectContext *managedObjectContext = self.managedObjectContext; if (managedObjectContext != nil) { if ([managedObjectContext hasChanges] && ![managedObjectContext save:&error]) { NSLog(@"ERROR in saveContext %@", [error localizedDescription]); } } } @end
"+" ボタンでレコードが追加され、データ入力可能。"-" ボタンでレコードが削除できる。SAVEしてからアプリケーションを再起動するとデータがセーブされている。