我有一个launchd守护进程,每隔一段时间就会使用NSOperationQueue通过Web服务上传一些数据。
我需要能够保留这些数据,以便稍后在发生故障时重新上传,甚至在会话之间(例如,在计算机关闭的情况下)。
这不是高负荷应用,它可能每隔一分钟间歇性地接收不超过1或2的物品,通常间隔数小时。
我没有这种持久性的初始实现如下:
这部分功能都很好。我现在要添加的部分是Web服务失败,计算机关闭等情况下的持久性。
似乎我可以使用MyDataObjects的NSMutableArray以及包含尚未上传的所有项目的NSKeyed(Un)归档程序,并观察所有操作的-isFinished键以从数组中删除项目,但它似乎应该有一个更简单的方法,事情出错的空间更小,特别是在线程安全方面。
有人能指出我正确的方向吗?
答案 0 :(得分:1)
您可以为每个项目添加两个操作。第一个将项目存储到本地存储,第二个将依赖于第一个,并在成功时从本地存储中删除该项目。
然后,当您要从本地存储还原任何项目时,只创建存储到云的操作,而不是存储本地操作。和以前一样,只有在成功的情况下才会从本地存储中删除这些项目,如果它们没有成功,则会将这些项目留在本地存储中以供下次尝试使用。