Идентификаторы объектов основных данных и идентификаторы постоянных объектов

Может показаться, что этот вопрос уже задавали много раз, но я не уверен, что правильно обобщил ответ. Так вот.

Идентификаторы объектов описаны Apple (WWDC 2012, сессия 214) как контекстно-безопасные и потокобезопасные. Поэтому я потратил некоторое время на преобразование своего кода, чтобы воспользоваться этим преимуществом. Однако это не кажется таким контекстно-безопасным, как кажется, потому что, как обсуждалось здесь Основные данные: получают ли когда-нибудь дочерние контексты постоянные идентификаторы объектов для вновь вставленных объектов? и в других местах существует нечто, называемое постоянными идентификаторами.

Что касается этого бизнеса с постоянным идентификатором, я посмотрел в NSManagedObjectContext.h:

/* Converts the object IDs of the specified objects to permanent IDs.  This implementation
will convert the object ID of each managed object in the specified array to a permanent
ID.  Any object in the target array with a permanent ID will be ignored;  additionally,
any managed object in the array not already assigned to a store will be assigned, based on
the same rules Core Data uses for assignment during a save operation (first writable store
supporting the entity, and appropriate for the instance and its related items.)  Although
the object will have a permanent ID, it will still respond positively to -isInserted until
it is saved.  If an error is encountered obtaining an identifier, the return value will be
NO.
*/

- (BOOL)obtainPermanentIDsForObjects:(NSArray *)objects error:(NSError **)error NS_AVAILABLE(10_5, 3_0);

Итак, у меня возникли проблемы с этим в моем коде. У меня есть иерархия NSManagedObjectContexts (скажем, B и C), и только 1 из них фактически связан с постоянным хранилищем (вызов A). Итак, C является дочерним элементом B, B является дочерним элементом A. Если я создам NSManagedObject из C, а затем вызову getPermanentIDsForObjects, будет ли он фактически постоянным? Поскольку комментарии к файлу .h читаются так, как будто он просматривает иерархию только до B (первое доступное для записи хранилище, поддерживающее сущность, а в дочерне-родительской настройке изменения поднимаются только на 1 уровень), а не A.

Заранее спасибо.


person Victor    schedule 18.01.2013    source источник
comment
Я получаю сообщение о том, что Core Data не может выполнить ошибку при получении постоянного идентификатора для объектов в дочернем контексте. Вы когда-нибудь узнавали, что это не разрешено?   -  person the Reverend    schedule 18.06.2014


Ответы (1)


Да, если вы вызываете obtainPermanentIDsForObjects, то получаемые вами идентификаторы должны быть постоянными (за исключением любых ошибок реализации в фреймворке, которые на данный момент кажутся маловероятными для чего-то этого ядра).

person Duncan Babbage    schedule 16.06.2014