Передача идентификаторов ManagedObject через контексты - PullRequest
2 голосов
/ 15 марта 2012

Сценарий:

Я имею дело с двумя viewControllers каждый со своим собственным контекстом (тот же поток). Я пытаюсь передать objectID управляемого объекта из MOC2 -> MOC1, с помощью метода делегата. Хорошо, сделал это, он кажется для передачи ObjectID.

Вот проблема ... из MOC1 (делегат) я получаю указатель на новый объект через [self.localMOC objectWithID:thePassedID]. Я запускаю NSLog на найденном объекте, журнал описывает его, кажется, найден. Теперь, когда я пытаюсь найти его в обновленном выбранном контроллере результатов, он не может быть найден, даже если он показывает объект в табличном представлении, использующем тот же контроллер результатов.

Вот записи в журнале ...
Объект через objectWithID: <Account: 0x6b11f90> (entity: Account; id: 0x6db44b0 <x-coredata:///Account/t5F84827D-E710-4331-A462-FCA1A0D335102> ; data: <fault>)

Объект контроллера результатов: <Account: 0x6b1fc50> (entity: Account; id: 0x6b50250 <x-coredata://84B6642A-9C80-451F-BED4-52952EDFC43C/Account/p9> ; data: <fault>)

Кажется, что один является постоянным идентификатором, а другой - временным идентификатором, а также совершенно другими адресами памяти.

Есть какие-нибудь подсказки относительно того, что я делаю неправильно?

Ниже поток:

enter image description here

Ответы [ 4 ]

1 голос
/ 18 марта 2012

I думаю , что две разные формы ObjectID указывают, что первая (которая не заканчивается на /p9, означает, что она была вставлена, но еще не сохранена. Вы уверены, что это так? Вы обычно можете подтвердить это, проверив в файле .sqlite, что ваши базовые данные поддерживаются (предостережение, что это детали реализации) и использовать sqlite3 для select * from Z<nameOfCoreDataEntityHere> where z_pk = 9;

1 голос
/ 15 марта 2012

Каждый контекст управляемого объекта должен быть зарегистрирован в качестве наблюдателя уведомления «действительно сохранено» (NSManagedObjextContextDidSaveNotification) из другого контекста, чтобы он мог объединить изменения из другого контекста при сохранении с использованием mergeChangesFromContextDidSaveNotification: .

0 голосов
/ 25 января 2013

Прежде чем получить objectID из нового объекта, используйте метод receivePermanentIDsForObjects, его NSManagedObjectContextВы получите идентификационный номер пользователя, не дожидаясь сохранения.

0 голосов
/ 20 марта 2012

После редизайна я использовал iOS5 родительский / дочерний MOC.Я до сих пор не до конца понимаю, почему идентификаторы объектов, даже если они были постоянными идентификаторами, возвращали разные объекты между контекстами.Это, очевидно, было связано с его слиянием, хотя я восстанавливал данные после полного сохранения.Надеюсь, что со временем внутренняя работа основных данных будет иметь для меня больше смысла.Спасибо за предложения, хотя.

...