Постоянный URI NSManagedObject из временного URI? - PullRequest
1 голос
/ 25 декабря 2010

У меня есть подкласс NSManagedObject, который хранит URI дочерних объектов. Первоначально он сохраняет временный URI при первом создании дочернего объекта и реализует -willSave для вызова -obtainPermanentIDsForObjects в своем NSManagedObjectContext перед сохранением, так что сохраняется только постоянный идентификатор.

Проблема, с которой я сталкиваюсь, заключается в том, что другие экземпляры также хранят временный URI. Когда кто-то получает сообщение -willSave вскоре после того, как это делает другой объект с тем же потомком, он также вызывает -obtainPermanentIDsForObjects и получает другой, неправильный постоянный URI, вызывая последующую ошибку Core Data ошибки как:

CoreData could not fulfill a fault for '0x102e4c110 <x-coredata://E17EE19B-E7F3-4102-ACFF-3E6F8BE8B104/MyEntityName/p2>'

Я хотел бы получить способ перейти от старого временного представления URIRepretation NSManagedObject к его новому постоянному представлению URIR, которое уже было сгенерировано.

Моя первоначальная мысль - сохранить свой собственный словарь <temporary URI,permanent URI> и проверить его перед использованием -obtainPermanentIDsForObjects - есть ли более простой (более надежный или встроенный) способ, который я пропускаю? Ничто из того, что я нашел в документации, ничего не предлагало.

Ответы [ 2 ]

4 голосов
/ 25 декабря 2010

Я получил постоянный идентификатор с помощью вызова -obtainPermanentIDsForObjects сразу после создания дочернего объекта, прежде чем он будет принадлежать какому-либо родительскому объекту. Таким образом, родительский объект никогда не видит временный идентификатор. Это работает, хотя я все еще хочу услышать, есть ли лучшие решения.

0 голосов
/ 25 декабря 2010

Подписаться на контекст вашего управляемого объекта NSManagedObjectContextDidSaveNotification. Перебирайте объекты в NSInsertedObjectsKey и получайте их идентификаторы управляемых объектов. На этом этапе все они будут иметь правильный, постоянный идентификатор, и вы сможете безопасно получить URI и сохранить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...