NSIncrementalStore вызывается с помощью NSSaveChangesRequest.deletedObjects == nil
Я нахожусь в процессе написания NSIncrementalStore
это поддерживается службой REST. Он хорошо работает для объектов POSTing и GETing, но при их удалении я сталкиваюсь со следующей проблемой:
- тестовые звонки
[context delete: object];
context.deletedObjects
содержитobject
(как и следовало ожидать)- тестовые звонки
[context save: &error];
- звонки с iOS
NSIncrementalStore
sexecuteRequest:withContext:error:
сNSSaveChangesRequest
; когда поступит звонок обаcontext.deletedObjects == nil
а такжеsaveChangesRequest.deletedObjects == nil
, так что мой код не может узнать, какие объекты для удаления с сервера.
Как это может случиться, что deletedObjects
установлен в nil
между призывом к контексту save
и его вызов его NSIncrementalStore
?
ОБНОВЛЕНИЕ возможная причина: object.objectID
все еще temporaryID
следующий save
, NSIncrementalStore
в настоящее время получает идентификаторы объектов от newObjectIDForEntity:referenceObject:
и описание из документации Apple как-то пока не подходит:
Новым объектам, вставленным в контекст управляемого объекта, присваивается временный идентификатор, который заменяется постоянным после сохранения объекта в постоянном хранилище.
1 ответ
Проблема была в том, что я еще не хранил достаточно информации на сервере для воссоздания (постоянных) идентификаторов объектов во время выборок.
Это решает проблему в NSIncrementalStore
:
когда
executeRequest:withContext:error:
получаетNSSaveChangesRequest
он извлекает (в моем случае) ссылочные строки из сохраненных объектов сreferenceObjectForObjectID:
и сохраняет их (вместе с другими атрибутами объектов) на сервере.когда
executeRequest:withContext:error:
получаетNSFetchRequest
он получает ссылочные строки (вместе с другими атрибутами объектов) с сервера и воссоздает объекты с[context objectWithID: [self newObjectIDForEntity: entity referenceObject: referenceString]]
,