Может показаться, что этот вопрос уже задавали много раз, но я не уверен, что правильно обобщил ответ. Так вот.
Идентификаторы объектов описаны 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.
Заранее спасибо.