[XCODE] CoreDataを用いたデータ管理を行う方法。準備編。
CoreDataを用いたデータ管理を行う方法を今日は書きたいと思います。
色々と書いていたら長くなったので、まずはCoreDataの準備について記載したいと思います。
iOS Core Data チュートリアル
ご参考になれば幸いです(((o(*゚▽゚*)o)))
- CoreDataを用いてデータ管理を行う方法。準備編。
- CoreDataを用いてデータ管理を行う方法。登録編!!
- CoreDataを用いてデータ管理を行う方法。更新・削除編!!!
- CoreDataを用いてデータ管理を行う方法。検索編!!!!
ツールバーで「File -> New ->File…」から、追加できます。
作成できたら、データ構造の定義を行います。
Model定義ファイルを開き、「Add Entity」ボタンを押すと、Entityが追加できます。
Entityができたら、そのEntityが保持する属性(attribute)を定義していきます。
今回は、「Setting」という名前のEntityを追加し、属性に「key」「value」を定義しました。
CoreDataを使う為には、Frameworkの読み込みが必要ですので、利用するファイルに、 以下のimport文を記載します。
また、Model定義を読み込んだ情報を保持するCoreDataのオブジェクトを、クラスのフィールドとかに追加します。
続いて、実際にModel定義を読み込んで、NSManagedObjectContextのインスタンスを作成するソースコードです。
ここは長いソースコードですが、「Tutorial.sqlite」や「Tutorial.momd」部分の名前を、 今回作成したModel定義ファイルの名称に変えれば、あとはそのまま活用できます。
この処理で作成したNSManagedObjectContextを、今後のInsert, Update, Delete, Selectで利用します。
NSManagedObjectContextは、プロジェクト生成時に自動的にコードが生成されるので、 使えるけど、作り方が分かんないと思っていました。今回詳しく学べて出来て良かったー(*´∇`*)
最後まで読み頂きましてありがとうございました。
色々と書いていたら長くなったので、まずはCoreDataの準備について記載したいと思います。
CoreDataとは
CoreDataとは、iPhoneアプリでデータを永続的に保存できる仕組みの一つです。データを扱う機能が豊富に そろっているようで、便利なフレームワークのようです。詳細は、以下を参照してみて下さい。iOS Core Data チュートリアル
CoreDataを用いたデータ管理
この記事も含めて、以下のような分類でCoreDataの使い方をブログに書いています。ご参考になれば幸いです(((o(*゚▽゚*)o)))
- CoreDataを用いてデータ管理を行う方法。準備編。
- CoreDataを用いてデータ管理を行う方法。登録編!!
- CoreDataを用いてデータ管理を行う方法。更新・削除編!!!
- CoreDataを用いてデータ管理を行う方法。検索編!!!!
CoreDataを使うための準備
CoreDataを使ったブランクプロジェクトを、XCODEの新規作成メニューで作る事も可能ですが、 今回はあえて、1つずつ自分で作るようにしてみました(機能のより深い理解をするためです)。Model定義ファイルを作成する
永続化するデータの形式を定義するModel定義ファイルを追加します。ツールバーで「File -> New ->File…」から、追加できます。
作成できたら、データ構造の定義を行います。
Model定義ファイルを開き、「Add Entity」ボタンを押すと、Entityが追加できます。
Entityができたら、そのEntityが保持する属性(attribute)を定義していきます。
今回は、「Setting」という名前のEntityを追加し、属性に「key」「value」を定義しました。
作成したModel定義を読み込む
上記で作成したModel定義を読み込み、CoreDataとしてソースコード上で使えるようにします。CoreDataを使う為には、Frameworkの読み込みが必要ですので、利用するファイルに、 以下のimport文を記載します。
#import <CoreData/CoreData.h>あと、CoreDataのフレームワークも追加します。これを追加し忘れるとコンパイル時に、 「リンク先がありません」エラーとなってしまいます。
また、Model定義を読み込んだ情報を保持するCoreDataのオブジェクトを、クラスのフィールドとかに追加します。
@interface CoreDataTutorialViewController : UIViewController { NSManagedObjectContext *context; } @end
続いて、実際にModel定義を読み込んで、NSManagedObjectContextのインスタンスを作成するソースコードです。
ここは長いソースコードですが、「Tutorial.sqlite」や「Tutorial.momd」部分の名前を、 今回作成したModel定義ファイルの名称に変えれば、あとはそのまま活用できます。
// NSManagedObjectContextのインスタンスを作成するメソッド - (void) loadManagedObjectContext { if (context != nil) return; NSPersistentStoreCoordinator *aCoodinator = [self coordinator]; if (aCoodinator != nil) { context = [[NSManagedObjectContext alloc] init]; [context setPersistentStoreCoordinator:aCoodinator]; } } // NSPersistentStoreCoordinatorインスタンスを作成するメソッド。 // NSManagedObjectContextを作成する際に必要となる。 // データ永続化の具体的な方法を実装しているが、 // 今回は、sqliteを用いたデータ永続化を行う。 - (NSPersistentStoreCoordinator *)coordinator { if (coordinator != nil) { returncoordinator; } NSString *directory = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSURL *storeURL = [NSURLfileURLWithPath: [directory stringByAppendingPathComponent: @"Tutorial.sqlite"]]; NSError *error = nil; coordinator = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[selfmanagedObjectModel]]; if (![coordinator addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) { NSLog(@"Unresolved error %@, %@", error, [error userInfo]); abort(); } returncoordinator; } // NSManagedObjectModelのインスタンスを生成するクラス。 // 上記で作成したモデル定義ファイルを読み込む。 - (NSManagedObjectModel *)managedObjectModel { if (managedObjectModel != nil) { return managedObjectModel; } NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"Tutorial"ofType:@"momd"]; NSURL *modelURL = [NSURL fileURLWithPath:modelPath]; managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL]; return managedObjectModel; }
この処理で作成したNSManagedObjectContextを、今後のInsert, Update, Delete, Selectで利用します。
最後に
今日の内容でNSManagedObjectContextを作成する所までを記載しました。NSManagedObjectContextは、プロジェクト生成時に自動的にコードが生成されるので、 使えるけど、作り方が分かんないと思っていました。今回詳しく学べて出来て良かったー(*´∇`*)
最後まで読み頂きましてありがとうございました。