Поясните работу Managed object context

Рейтинг: 0Ответов: 1Опубликовано: 10.11.2014

Непонятна из документации следующая строка:

Within a given context, there is at most one managed object to represent any given record in a persistent store.

Ответы

▲ 3Принят

Каждая запись (NSManagedObject) существует исключительно в пределах своего контекста (NSManagedObjectContext). Если есть объект и работа с ним ведется в main thread NSManagedObejctContext и мы создали новый контекст для работы в background, мы не можем просто взять и редактировать в нем объект, например:

// берем default main thread контекст
NSManagedObjectContext *context = [(FRAppDelegate *)[[UIApplication sharedApplication] delegate] managedObjectContext];

// создаем в нем entity
FRUser *user = [NSEntityDescription insertNewObjectForEntityForName:@"FRUser" inManagedObjectContext:context];

// создаем child context для работы в бакграунде
NSManagerObjectContext *tempContext = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSPrivateQueueConcurrencyType];
    context.parentContext = context;

[tempContext performBlock:^{
//мы НЕ МОЖЕМ сделать так:
     user.uid = 10001;
     user.name = @"";
// мы пытаемся изменить запись из другого контекста
// правильным будет:
     NSError *error = nil;
     FRUser *localUser = [tempContext existingObjectWithID:[user objectID] error:&error];
// и дальше уже можем менять объект localUser и сохранять. Так же мы не может установить relationship между объектами из разных контекстов, делать все нужно по тому же принципу. 
}];