我正在编写一个由REST服务支持的NSIncrementalStore
。它适用于POSTing和GETing对象,但是在删除它们时遇到以下问题:
[context delete: object];
context.deletedObjects
包含object
(正如人们所料)[context save: &error];
NSIncrementalStore
调用executeRequest:withContext:error:
s NSSaveChangesRequest
;当呼叫到达context.deletedObjects == nil
和saveChangesRequest.deletedObjects == nil
时,我的代码无法找到要从服务器删除的对象。如果deletedObjects
在对上下文的nil
的调用与其save
的调用之间设置为NSIncrementalStore
,会怎样?
更新可能原因:object.objectID
仍然是temporaryID
之后的save
。 NSIncrementalStore
目前正在从newObjectIDForEntity:referenceObject:
获取对象ID,Apple documentation中的描述似乎尚不适用:
为托管对象上下文中插入的新对象分配了一个 临时ID,一旦被对象替换为永久ID 被保存到持久性商店。
答案 0 :(得分:0)
问题是我还没有在服务器上存储足够的信息来在提取过程中重新创建(永久)对象ID。
这解决了NSIncrementalStore
:
当executeRequest:withContext:error:
收到NSSaveChangesRequest
时,它会从referenceObjectForObjectID:
的已保存对象中提取(在我的情况下)引用字符串并存储这些字符串(以及对象'其他属性)在服务器上。
当executeRequest:withContext:error:
收到NSFetchRequest
时,它会从服务器获取参考字符串(以及对象'其他属性)并使用[context objectWithID: [self newObjectIDForEntity: entity referenceObject: referenceString]]
重新创建对象。