逐个保存NSUndoManager事务

时间:2015-05-28 22:32:16

标签: ios core-data nsmanagedobjectcontext nsundomanager

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

我担心的是,在我看来,用户可以在短时间内完成大量的互动。在交互之间没有足够的时间来接收从服务器返回的成功消息。所以要么我锁定GUI,直到下一条消息返回 - 现在就是这种情况 - 或者选择不同的方法。

我的新方法是让用户进行多次互动并将交易置于undo stack提供的NSUndoManager上,在NSManagedObjectContext上启用,但仅保存/提交该交易已收到哪条成功消息。我怎样才能一次移动一个“游标”,逐个提交记录,虽然上下文中已包含未保存的更改?

1 个答案:

答案 0 :(得分:1)

NSUndoManager并不适合这项任务。您可以告诉它撤消或重做操作,但您无法检查这些操作或有选择地将数据保存在当前的撤消堆栈中。

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

这意味着iOS设备可能有服务器不知道的排队更改,尤其是在网络不可靠或不可用的情况下。在这种情况下,这几乎是不可避免的,除非你做了一些糟糕的事情,比如在网络重新启动之前拒绝让人们做出新的改变。