Извлечение объекта в дочернем MOC UIManagedDocument MOC, связь ко многим пуста

Мое приложение использует UIManagedDocument для обработки своих данных с помощью Core Data. Между двумя сущностями: Post и Tag существует отношение ко многим.

Когда я хочу отредактировать сообщение, я создаю временный NSManagedObjectContext, устанавливаю его parentContext в значение manageObjectContext UIManagedDocument и получаю сообщение с помощью метода objectWithID:.

Предположим это:

  • MOC1 — это NSManagedObjectContext UIManagedDocument.
  • MOC2 — это временный NSManagedObjectContext для редактирования сообщения.
  • post1 — это сообщение в MOC1
  • post2 - это сообщение в MOC2

Вот проблема:

  • post1.tags возвращает 2 тега
  • post2.tags возвращает 0 тегов

Все свойства post2 извлекаются правильно, за исключением тегов отношения ко многим.

Почему у post2.tags нет тега?


person Olivier    schedule 16.11.2011    source источник


Ответы (2)


Хотелось бы, чтобы у меня был ответ на это, но, насколько я смог определить, это ошибка. Поиск отношений «ко многим» в этом сценарии вообще не работает.

Честно говоря, кажется немного трудным поверить, что это избежало тестирования, но я совершенно не смог заставить это работать каким-либо образом.

person Allan Bazinet    schedule 09.12.2011
comment
Да, я тоже думаю, что это баг. Пока не успел оформить, скоро сделаю. - person Olivier; 09.12.2011

При дальнейшем тестировании я думаю, что это связано с временными и постоянными идентификаторами объектов; если мы видим одно и то же, то я рискну предположить, что объекты, возвращаемые отношением ко многим в MOC1, будут иметь временные, а не постоянные идентификаторы.

Предположительно в MOC2 вы делаете некоторые вставки для создания объектов в отношении ко многим. Когда вы закончите вставку и непосредственно перед сохранением, получите массив объектов, которые были вставлены с помощью [[moc2 InsertedObjects] allObjects]. Передайте этот массив [moc2getPermanentIDsForObjects:error] с помощью массива отслеживания. Затем вызовите save на MOC2.

Кажется, это работает для меня. Похоже, что по умолчанию вызов сохранения в MOC2 фактически не приводит к созданию постоянных идентификаторов объектов в MOC1.

person Allan Bazinet    schedule 09.12.2011
comment
Я попробую это завтра. Буду держать вас в курсе. - person Olivier; 10.12.2011
comment
Это просто спасло мою задницу после нескольких недель борьбы с этим дерьмом! Большое спасибо!! - person Lukas Petr; 19.04.2013