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してからアプリケーションを再起動するとデータがセーブされている。