CoreDataの基礎 その1|CoreDataの基礎 その2|CoreDataの基礎 その3|CoreDataの基礎 その4
次はCoreDataの基本部分の実装ファイルをみていきます。
CoreDataにチェックしてWindow-based Applicationプロジェクトを作成するとAppDelegateに以下のような雛形が作成されます。
#import "SongAppDelegate.h"
@implementation SongAppDelegate
@synthesize window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[window makeKeyAndVisible];
return YES;
}
- (void)applicationWillResignActive:(UIApplication *)application {
}
- (void)applicationDidEnterBackground:(UIApplication *)application {
}
- (void)applicationWillEnterForeground:(UIApplication *)application {
}
- (void)applicationDidBecomeActive:(UIApplication *)application {
}
- (void)applicationWillTerminate:(UIApplication *)application {
NSError *error = nil;
if (managedObjectContext_ != nil) {
if ([managedObjectContext_ hasChanges] && ![managedObjectContext_ save:&error]) {
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
}
#pragma mark -
#pragma mark Core Data stack
- (NSManagedObjectContext *)managedObjectContext {
if (managedObjectContext_ != nil) {
return managedObjectContext_;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
managedObjectContext_ = [[NSManagedObjectContext alloc] init];
[managedObjectContext_ setPersistentStoreCoordinator:coordinator];
}
return managedObjectContext_;
}
- (NSManagedObjectModel *)managedObjectModel {
if (managedObjectModel_ != nil) {
return managedObjectModel_;
}
NSString *modelPath = [[NSBundle mainBundle] pathForResource:@"Song" ofType:@"momd"];
NSURL *modelURL = [NSURL fileURLWithPath:modelPath];
managedObjectModel_ = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];
return managedObjectModel_;
}
- (NSPersistentStoreCoordinator *)persistentStoreCoordinator {
if (persistentStoreCoordinator_ != nil) {
return persistentStoreCoordinator_;
}
NSURL *storeURL = [NSURL fileURLWithPath: [[self applicationDocumentsDirectory] stringByAppendingPathComponent: @"Song.sqlite"]];
NSError *error = nil;
persistentStoreCoordinator_ = [[NSPersistentStoreCoordinator alloc] initWithManagedObjectModel:[self managedObjectModel]];
if (![persistentStoreCoordinator_ addPersistentStoreWithType:NSSQLiteStoreType configuration:nil URL:storeURL options:nil error:&error]) {
}
return persistentStoreCoordinator_;
}
#pragma mark -
#pragma mark Application's Documents directory
- (NSString *)applicationDocumentsDirectory {
return [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
}
#pragma mark -
#pragma mark Memory management
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application {
}
- (void)dealloc {
[managedObjectContext_ release];
[managedObjectModel_ release];
[persistentStoreCoordinator_ release];
[window release];
[super dealloc];
}
アプリケーション終了時にデータ(ManagedObjectContext)変更があった場合、保存エラー処理を記述するようです。
NSFetchedResultsControllerのインスタンスです。 ここではgetterの役割でしょうか? NSManagedObjectContextインスタンスが生成されていなければ、新しく生成します。 その際、既に生成済みのNSPersistentStoreCoordinatorをsetします。
これもgetterでしょう。 NSPersistentStoreCoordinatorが生成が生成されていなければ、新しく生成します。 その際、sqliteファイルをNSURLで指定し、initWithManagedObjectModelでモデルファイルとして生成します。
アプリのデータ保存パスを返します。
忘れずにメモリを解放します。
Window-based Applicationではここまでです。 Navigation-based Applicationで作成した場合は、datetimeを値としたレコード処理がもれなくついてきます。 勉強には良さそうですが、いろいろと修正しなくちゃいけない気もしたり・・・ いや、まだ深く突っ込んでないから知りませんが(^^;)
次は、xcdatamodelを使ったモデラーの使い方をやってみます。
CoreDataの基礎 その1|CoreDataの基礎 その2|CoreDataの基礎 その3|CoreDataの基礎 その4