将通过Web服务上传的项目保留到磁盘

时间:2009-08-25 23:04:01

标签: objective-c cocoa thread-safety persistence

我有一个launchd守护进程,每隔一段时间就会使用NSOperationQueue通过Web服务上传一些数据。

我需要能够保留这些数据,以便稍后在发生故障时重新上传,甚至在会话之间(例如,在计算机关闭的情况下)。

这不是高负荷应用,它可能每隔一分钟间歇性地接收不超过1或2的物品,通常间隔数小时。

我没有这种持久性的初始实现如下:

  1. 守护进程接收数据。
  2. 守护程序将数据解析为MyDataObject类型的对象。
  3. 守护进程创建NSOperation子类的实例,并将MyDataObject作为要上载的对象,并将其添加到其NSOperationQueue。
  4. NSOperationQueue会通过Web服务上传并上传MyDataObject。
  5. 这部分功能都很好。我现在要添加的部分是Web服务失败,计算机关闭等情况下的持久性。

    似乎我可以使用MyDataObjects的NSMutableArray以及包含尚未上传的所有项目的NSKeyed(Un)归档程序,并观察所有操作的-isFinished键以从数组中删除项目,但它似乎应该有一个更简单的方法,事情出错的空间更小,特别是在线程安全方面。

    有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

您可以为每个项目添加两个操作。第一个将项目存储到本地存储,第二个将依赖于第一个,并在成功时从本地存储中删除该项目。

然后,当您要从本地存储还原任何项目时,只创建存储到云的操作,而不是存储本地操作。和以前一样,只有在成功的情况下才会从本地存储中删除这些项目,如果它们没有成功,则会将这些项目留在本地存储中以供下次尝试使用。