我不仅需要将更改保存在本地的Core Data中,还需要保存在服务器上。
我担心的是,在我的例子中,用户可以在短时间内完成大量的交互。在交互之间,没有足够的时间接收服务器返回的成功消息。所以,要么我锁定GUI,直到下一条消息返回--这就是现在的-,或者选择另一种方法。
我的新方法是让用户进行许多交互,并将事务放到由undo stack提供的NSUndoManager上,在NSManagedObjectContext、上启用,但只保存/提交成功消息被接收的事务。如何一次一个地撤消“游标”,一个接一个地提交记录,尽管上下文中已经包含了大量未保存的更改?
发布于 2015-05-29 17:34:17
NSUndoManager并不真正适合这个任务。您可以告诉它撤消或重做操作,但不能检查这些操作或在当前撤消堆栈中有选择地保存数据。
我过去所做的就是创建我自己的输出更改队列。每当更改在本地保存时,请将这些更改添加到未同步的传出更改列表中。然后使用不同的队列处理该队列,方法是将它们发送到服务器,如果服务器报告成功,则清除这些更改。您可以使用NSManagedObjectContextWillSaveNotification和/或NSManagedObjectContextDidSaveNotification来监视更改和更新出站队列。
这意味着iOS设备可能出现了服务器不知道的队列更改,特别是当网络不可靠或不可用时。不过,在这种情况下,这几乎是不可避免的,除非你做了一些可怕的事情,比如拒绝让人们做出新的改变,直到网络恢复。
https://stackoverflow.com/questions/30518146
复制相似问题