본문 바로가기
프로그래밍 놀이터/iOS

[ios/tutorial] Core Data - Initializing the Core Data Stack

by 돼지왕 왕돼지 2017. 11. 3.
반응형

 [ios/tutorial] Core Data - Initializing the Core Data Stack


https://developer.apple.com/library/watchos/documentation/Cocoa/Conceptual/CoreData/InitializingtheCoreDataStack.html#//apple_ref/doc/uid/TP40001075-CH4-SW1

addPersistentStoreWithType, App, core data, core data init, core data stack, db schema, db 작업 수행, disk, documentURL, external data store, Framework, initCoreData, initWithConcurrencyType, initWithContentsOfURL, initWithManagedObjectModel, interaction interface, managed object, managed object context 등록, Memory, mom, momd, NSAssert, nsbundle, NSFileManager, NSMainQueueConcurrencyType, NSManagedObjectContext, NSManagedObjectModel, NSPersistentStore, NSPersistentStoreCoodinator, NSPersistentStoreCoordinator, NSSQLiteStoreType, object graph, persistentStoreCoodinator, Redo, setPersistentStoreCoordinator, undo, URLForResource, validation, withExtension, [ios/tutorial] Core Data - Initializing the Core Data Stack, 변경분 track, 초기화


-

Core data stack 은 core data 를 초기화하고, external data store 와 app 사이를 중재하는 역할을 하는 framework 집합을 이야기한다.



-

stack 은 다음 세 가지로 구성된다.


NSManagedObjectContext

NSPersistentStoreCoordinator

NSManagedObjectModel


addPersistentStoreWithType, App, core data, core data init, core data stack, db schema, db 작업 수행, disk, documentURL, external data store, Framework, initCoreData, initWithConcurrencyType, initWithContentsOfURL, initWithManagedObjectModel, interaction interface, managed object, managed object context 등록, Memory, mom, momd, NSAssert, nsbundle, NSFileManager, NSMainQueueConcurrencyType, NSManagedObjectContext, NSManagedObjectModel, NSPersistentStore, NSPersistentStoreCoodinator, NSPersistentStoreCoordinator, NSSQLiteStoreType, object graph, persistentStoreCoodinator, Redo, setPersistentStoreCoordinator, undo, URLForResource, validation, withExtension, [ios/tutorial] Core Data - Initializing the Core Data Stack, 변경분 track, 초기화


-

app 에서 data 를 접근하기 위해서는 core data stack 을 초기화시켜야 한다.

initialize 코드 예제는 아래와 같다.

-(void)initCoreData{

     NSURL *modelURL = [[NSBundle mainBundle URLForResource:@“DataModel” withExtension:@“momd”];

     NSManagedObjectModel* mom = [[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL];

     NSAssert(mom != nil, @“Error initializing Managed Object Model”);

     NSPersistentStoreCoodinator* psc = [[NSpersistentStoreCoordinator alloc] initWithManagedObjectModel:mom];


     NSManagedObjectContext* moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];

     [moc setPersistentStoreCoordinator:psc];

     

     NSFileManager *fileManager = [NSFileManager defaultManager];

     NSURL *documentURL = [[fileManager URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];

     NSURL *storeURL = [documentURL URLByAppendingPathComponent:@“DataModel.sqlite”];


     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^(void){

          NSError *error = nil;

          NSPersistentStoreCoordinator *psc = [[self managedObjectContext] persistentStoreCoodinator];

          NSPersistentStore* store = [psc addPersistentStoreWithType:NSSqliteStoreType

                                                                      configure:nil

                                                                     URL:storeURL

                                                                     options:options

                                                                     error:&error];

          NSAssert(store != nil, @“Error initializing PSC: %@\n%@“, [error localizedDescription], [error userInfo]);

     });

}



-

NSManagedObjectModel 은 CoreData stack 에 통해 접근되어질 data 들을 묘사해놓은 class 이다.

DB 파일의 schema 에 매칭되는 녀석으로 구조 정보를 가지고 있다.

NSManagedObjectModel 은 보통 줄여 mom 으로 변수명이 지어진다.




-

NSPersistentStoreCoordinator 는 CoreData stack 의 중간에 위치하여 NSManagedObjectModel 을 이용하여 entity 를 만든다.

만약 이미 존재하고 있다면 NSPersistentStore 로부터 정보를 로드한다.

PersistentStore 는 disk 나 memory 상에 저장될 수 있다.

일반적이지는 않지만, 한 NSPersistentStoreCoodinator 에 여러 개의 persistent store 가 연결될 수도 있다.


NSPersistentStoreCoordinator 는 실제 DB 작업을 수행하는 곳이며,

NSManagedObjectContext 의 요청에 대한 응답을 주고, data 에 대한 validation 도 한다.



-

NSManagedObjectContext 는 app 이 interaction 하는 창구와 같다.

모든 managed object 는 managed object context 에 등록되어야만 한다.

이 context 를 이용하여 object graph 에 넣고 빼고 등을 할 수 있다.

context 는 변경분을 track 하고 있는다.

그래서 undo, redo 등을 지원한다.



-

context 에 변경된 것을 저장하려 하면, context 는 object 들이 valid state 인지 점검한다.

만약 valid 하다면 persistent store 에 변경분을 저장한다.





반응형

댓글