スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
このエントリーをはてなブックマークに追加

[iOS]CoreDataの導入について

この導入方法は、

「既存のプロジェクトがCoreDataに対応していない状態から導入を行うことを想定しています。」

予めご理解の上で、ご覧ください。
それでは導入を開始していきます。

[iOS]CoreDataの導入について

(1)必要なリンカーを追加する。
・CoreData.framework
・CoreLocation.framework
[iOS]CoreDataの導入について_1

(2)プロジェクト名-Prefix.pch (プロジェクト名_Prefix.pch) に必要なファイルをインポートする
//以下の部分へ、CoreDataをインポートする
#ifdef __OBJC__
#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h> //新規追加されたインポート
#endif


(3)AppDelegateに必要なプロパティ3つを実装
・NSManagedObjectContext
・NSPersistentStoreCoordinator
・NSMangaedObjectModel

//.h
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;

//.m
@synthesize managedObjectContext = __managedObjectContext;
@synthesize persistentStoreCoordinator = __persistentStoreCoordinator;
@synthesize managedObjectModel = __managedObjectModel;

//managedObjectContextのgetter
- (NSManagedObjectContext *)managedObjectContext
{
//managedObjectContextがすでにセットされているなら]
//そのまま返す
if (__managedObjectContext != nil)
{
return __managedObjectContext;
}

NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
//managedObjectContextは無いが、persistentStoreCoordinatorがある場合は
//インスタンスを生成し、persistentStoreCoordinatorでmodel(.xcdatamodeld)との関連付けをする
if (coordinator != nil)
{
__managedObjectContext = [[NSManagedObjectContext alloc] init];
[__managedObjectContext setPersistentStoreCoordinator:coordinator];
}
return __managedObjectContext;
}


- (NSManagedObjectModel *)managedObjectModel
{
if (__managedObjectModel != nil)
{
return __managedObjectModel;
}
//ここのプロジェクト名は厳密には「modelname」です。
//ここでは、プロジェクトの名前をそのままモデルに付けているためこうしています。
//詳しくはこの記事の最後にURLを載せておきます。(参考URL①)
NSURL *modelURL = [[NSBundle mainBundle] URLForResource:@"プロジェクト名" withExtension:@"momd"];
__managedObjectModel = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return __managedObjectModel;
}

- (NSPersistentStoreCoordinator *)persistentStoreCoordinator
{
if (__persistentStoreCoordinator != nil)
{
return __persistentStoreCoordinator;
}

//このアプリのフォルダから、プロジェクト名.sqliteでファイルにアクセスするURLを作成する
NSURL *storeURL = [[self applicationDocumentsDirectory] URLByAppendingPathComponent:@"プロジェクト名.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;
}

#pragma mark - Application's Documents directory

//このアプリのドキュメントディレクトリーを返す
- (NSURL *)applicationDocumentsDirectory
{
return [[[NSFileManager defaultManager] URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}



参考URL①:[iOS][Mac] CoreData - マイグレーション[4] モデルファイルの構成
このエントリーをはてなブックマークに追加

tag : iOS CoreData 導入

コメントの投稿

非公開コメント

Translation


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。
プロフィール

チーズくん

Author:チーズくん
個人的メモをただ羅列しています。
twitter:@cheese1038

バロメーター
最新記事
最新コメント
最新トラックバック
月別アーカイブ
カテゴリ
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。