2012/06/25更新

[XCODE] CoreDataを用いたデータ管理を行う方法。準備編。

このエントリーをはてなブックマークに追加      

CoreDataを用いたデータ管理を行う方法を今日は書きたいと思います。
色々と書いていたら長くなったので、まずはCoreDataの準備について記載したいと思います。

How to use 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は、プロジェクト生成時に自動的にコードが生成されるので、 使えるけど、作り方が分かんないと思っていました。今回詳しく学べて出来て良かったー(*´∇`*)
最後まで読み頂きましてありがとうございました。





こんな記事もいかがですか?

RSS画像

もしご興味をお持ち頂けましたら、ぜひRSSへの登録をお願い致します。