2012-03-15 3 views
2

Сценарий:Передачи идентификаторов ManagedObject через контексты

Я имею дело с 2 viewControllers каждый со своим собственным контекстом (тем же нить). Я пытаюсь передать идентификатор объекта managedObject из 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>)

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

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

Ниже поток:

enter image description here

ответ

0

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

1

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

+0

Ну, я знаю, что MOC 1 обновляется, потому что новый управляемый объект (или его форма) не будет отображаться в диспетчере представлений таблиц и получаемых результатов. Кроме того, мне нужно использовать метод делегата для передачи ObjectID. – Gobot

+0

Может быть, есть обновление, и _updating_? Если у вас есть два отдельных контекста и вносить изменения, вы должны как-то синхронизировать данные, как вы это делаете сейчас? – jrturton

+0

через метод сброса NSManagedObject. Я думал, что ObjectID специфичен для каждого управляемого объекта, и в основном использовался для получения ссылки на этот объект. Как еще можно восстановить этот объект, если нет значения «ID»? Что меня смущает, так это то, что объект утверждает, что его можно найти в контексте. – Gobot

1

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

0

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

Смежные вопросы