У меня есть то, что я предполагаю, довольно стандартная настройка, с одной MOC-записью, которая никогда не сохраняется (содержит кучу объектов, загруженных из Интернета) и еще один постоянный MOC, который сохраняет объекты. Когда пользователь выбирает объект из scratchMOC для добавления в свою библиотеку, я хочу либо 1) удалить объект из scratchMOC и вставить в PermanentMOC, либо 2) скопировать объект в PermanentMOC. Часто задаваемые вопросы по основным данным говорит, что я могу скопировать объект следующим образом:
NSManagedObjectID *objectID = [managedObject objectID];
NSManagedObject *copy = [context2 objectWithID:objectID];
(В этом случае context2 будет постояннымMOC.) Однако, когда я это делаю, скопированный объект сбой; данные изначально не решены. Когда он будет разрешен, позже все значения равны нулю; ни одна из данных (атрибутов или отношений) из исходного управляемого объекта не копируется и не ссылается. Поэтому я не вижу никакой разницы между использованием этого метода objectWithID и просто вставляет совершенно новый объект в PermanentMOC с помощью insertNewObjectForEntityForName:.
Я понимаю, что могу создать новый объект в PermanentMOC и вручную скопировать каждую пару ключевых значений из старого объекта, но я не очень доволен этим решением. (У меня есть несколько разных управляемых объектов, для которых у меня есть эта проблема, поэтому я не хочу писать и обновлять методы копирования: для всех из них по мере продолжения разработки.) Есть ли лучший способ?