Базовые данные: ноль контекста управляемого объекта на моем управляемом объекте - PullRequest
0 голосов
/ 15 сентября 2011

Я использую 2 контекста управляемых объектов для эффективного важного большого набора данных в фоновом режиме.Я гарантирую, что я использую только 1 контекст управляемого объекта за раз в потоке.

NSManagedObjectContext *context = [[NSManagedObjectContext alloc] init];
[context setPersistentStoreCoordinator:[self persistentStoreCoordinator]];

MetricType *metricType = [self metricTypeForName:self.metricName fromContext:context];

NSLog(@"metric context %@", [metricType managedObjectContext]);

[self processDataInContext:context forMetric:metricType];

В приведенном выше фрагменте кода NSLog правильно распечатывает адрес управляемогоObjectContext, который я использую,Затем я перехожу к processDataInContext - это просто закрытый метод для взаимодействия с массивом данных json и добавления объектов.Каждый объект имеет отношение к MetricType.

Однако, когда я иду связать их

metric.metricType = metricType;

, я получаю сообщение об ошибке: Неверная попытка установить отношение 'metricType' между объектами в разныхконтексты .... даже при том, что я гарантирую, что я не делаю этого.

Когда я делаю вывод журнала перед этой строкой:

NSLog(@"My Context %@", context);
NSLog(@"metric context %@", [metricType managedObjectContext]);

Контекст metricType возвращает nil !!

Как это стало ноль?Я не нил это, и это, кажется, причина его жалобы.

Ответы [ 2 ]

0 голосов
/ 15 сентября 2011

Способ инициализации metricType выглядит подозрительно. Что [self metricTypeForName: fromContext:] на самом деле делает для возврата экземпляра MetricType? Вы создаете новый MetricType, используя [[MetricType alloc] init]? Я подозреваю, что вы возвращаете что-то в пул авто-релизов

0 голосов
/ 15 сентября 2011

Я понял это

[context reset]; 

.. вызывался каждые 50 записей, что, конечно, удаляло мой объект metricType из контекста, и я не собирал его заново.

...