NSIncrementalStore使用NSSaveChangesRequest.deletedObjects == nil调用

时间:2015-03-04 10:26:33

标签: ios core-data nsincrementalstore

我正在编写一个由REST服务支持的NSIncrementalStore。它适用于POSTing和GETing对象,但是在删除它们时遇到以下问题:

  1. 测试电话[context delete: object];
  2. context.deletedObjects包含object(正如人们所料)
  3. 测试电话[context save: &error];
  4. iOS使用NSIncrementalStore调用executeRequest:withContext:error: s NSSaveChangesRequest;当呼叫到达context.deletedObjects == nilsaveChangesRequest.deletedObjects == nil时,我的代码无法找到要从服务器删除的对象。
  5. 如果deletedObjects在对上下文的nil的调用与其save的调用之间设置为NSIncrementalStore,会怎样?

    更新可能原因:object.objectID仍然是temporaryID之后的saveNSIncrementalStore目前正在从newObjectIDForEntity:referenceObject:获取对象ID,Apple documentation中的描述似乎尚不适用:

      

    为托管对象上下文中插入的新对象分配了一个   临时ID,一旦被对象替换为永久ID   被保存到持久性商店。

1 个答案:

答案 0 :(得分:0)

问题是我还没有在服务器上存储足够的信息来在提取过程中重新创建(永久)对象ID。

这解决了NSIncrementalStore

中的问题
  • executeRequest:withContext:error:收到NSSaveChangesRequest时,它会从referenceObjectForObjectID:的已保存对象中提取(在我的情况下)引用字符串并存储这些字符串(以及对象'其他属性)在服务器上。

  • executeRequest:withContext:error:收到NSFetchRequest时,它会从服务器获取参考字符串(以及对象'其他属性)并使用[context objectWithID: [self newObjectIDForEntity: entity referenceObject: referenceString]]重新创建对象。