逐个保存NSUndoManager事务

我不仅需要将更改保存在Core Data ,还需要保存在服务器上。

我担心的是,在我的情况下,用户可以在很短的时间内做一堆交互。 在交互之间没有足够的时间来接收从服务器返回的成功消息。 因此,要么lockingGUI,直到下一个消息返回 – 现在就是这种情况 – 或者select一种不同的方法。

我的新方法是让用户做很多交互,并将事务放到NSUndoManager提供的undo stack ,在NSManagedObjectContext启用, 但是只保存/提交接收到成功消息的事务 。 如何一次移动一个撤消“游标”,逐个提交logging,尽pipe上下文中已经包含了未经保存的更改?

NSUndoManager不太适合这个任务。 你可以告诉它撤消或重做动作,但是你不能检查这些动作,或者有select地将数据保存在当前的撤消堆栈中。

我过去所做的是创build我自己的传出更改队列。 只要本地保存更改,请将这些更改添加到未同步的传出更改列表中。 然后使用不同的队列通过将队列发送到服务器来处理该队列,如果服务器报告成功,则清除这些更改。 您可以使用NSManagedObjectContextWillSaveNotification和/或NSManagedObjectContextDidSaveNotification来监视更改并更新出站队列。

这意味着iOS设备可能有排队的更改,服务器不知道,特别是如果networking不可靠或不可用。 但是,在这种情况下,这是不可避免的,除非你做了一些糟糕的事情,例如拒绝让人们在networking恢复之前做出新的改变。