[ios/tutorial] Core Data - Initializing the Core Data Stack
-
Core data stack 은 core data 를 초기화하고, external data store 와 app 사이를 중재하는 역할을 하는 framework 집합을 이야기한다.
-
stack 은 다음 세 가지로 구성된다.
NSManagedObjectContext
NSPersistentStoreCoordinator
NSManagedObjectModel
-
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 에 변경분을 저장한다.
'프로그래밍 놀이터 > iOS' 카테고리의 다른 글
[ios/tutorial] Core Data - Creating and Modifying Custom Managed Objects (0) | 2017.11.05 |
---|---|
[ios/tutorial] Core Data - Fetching Objects (0) | 2017.11.04 |
[ios/tutorial] Core Data - Creating a Managed Object Model (0) | 2017.11.02 |
[ios] Nullable & NonNull annotation (0) | 2017.10.30 |
[ios] ARC 와 Toll-free bridging (0) | 2017.10.29 |
댓글