Objective c 将通过web服务上载到磁盘的项目持久化

Objective c 将通过web服务上载到磁盘的项目持久化,objective-c,cocoa,thread-safety,persistence,Objective C,Cocoa,Thread Safety,Persistence,我有一个启动守护程序,它经常使用NSOperationQueue通过web服务上传一些数据 我需要能够持久保存这些数据,以便在出现故障时,甚至在会话之间(例如,在计算机关闭的情况下),可以重新上载这些数据 这不是一个高负载应用程序,它可能每分钟间歇性接收的项目不超过1或2个,通常间隔几个小时 在没有这种持久性的情况下,我的初始实现如下所示: 守护进程接收数据 守护进程将数据解析为MyDataObject类型的对象 守护进程创建NSOperation子类的实例,将MyDataObject作为要上载

我有一个启动守护程序,它经常使用NSOperationQueue通过web服务上传一些数据

我需要能够持久保存这些数据,以便在出现故障时,甚至在会话之间(例如,在计算机关闭的情况下),可以重新上载这些数据

这不是一个高负载应用程序,它可能每分钟间歇性接收的项目不超过1或2个,通常间隔几个小时

在没有这种持久性的情况下,我的初始实现如下所示:

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

    似乎我可以使用MyDataObjects的NSMutableArray以及NSKeyed(Un)archiver,其中包含所有尚未上载的项目,并观察所有操作的-isFinished键以从数组中删除项目,但似乎应该有一种更简单的方法,即减少出错的空间,特别是在线程安全方面


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

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


    然后,当您想要从本地存储恢复任何项目时,您只创建存储到云操作,而不创建存储本地操作。如前所述,它们仅在成功时才从本地存储中删除项目,如果不成功,则将项目保留在本地存储中以供下次尝试。

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

    然后,当您想要从本地存储恢复任何项目时,您只创建存储到云操作,而不创建存储本地操作。与以前一样,只有成功才能从本地存储中删除项目,如果不成功,则将项目保留在本地存储中以供下次尝试