iPhone:启动时加载队列

时间:2010-07-17 05:48:38

标签: iphone objective-c queue startup

我在任何地方都找不到这个问题的答案,但这似乎是一个典型的问题:

我想发送一些POST请求(使用ASIHTTPRequest,我已经做过),但如果出现问题,用户可以决定“稍后尝试”,这意味着,任务应该放在队列中应在下次应用程序启动时读取此队列。所以,这是我的问题:如何“保存”队列,以便应用程序可以在下次启动时读取它?是否可以“读取”队列并尝试再次发送此POST-Request,比如10分钟后,即使应用程序没有运行?

为了能够做到这一点,我应该阅读什么样的文档?

我很高兴听到任何答案。提前谢谢。

PS:我的另一个想法:因为我只需要上传照片,我可以有一个文件夹,其中包含所有仍需要上传的照片,当应用程序启动时,应用程序会查看此文件夹并尝试发送此文件夹中的所有照片。它有意义吗?

2 个答案:

答案 0 :(得分:2)

我假设你已经看过NSOperationQueueNSOperation了。 AFAIK没有内置的序列化NSOperation支持,但您可以非常轻松地为NSOperation子类编写自己的序列化机制,用于发布数据并编写NSOperationQueue'如果出现问题,请将operations发送到磁盘。

在不了解太多细节的情况下,很难给出准确的答案。有很多方法可以将数据写入磁盘并在以后再次加载,您所采用的方向在很大程度上取决于您的情况。

答案 1 :(得分:2)

我对此问题的处理方式如下:

  1. 每当您无法发送详细信息时 - 使用'[NSArray writeToFile:]'将数组内容写入文件,如果数组包含任何自定义的数据(如果您的数组包含标准cocoa对象,则可以使用序列化)(NSString, NSData等)他们已经用序列化实现了)
  2. 应用启动时;将文件中的内容直接加载到数组对象('[NSArray arrayWithContentsOfFile:]')
  3. 然后构建http请求并尝试发送。在应用程序中,数据(在您的案例数组中)是存储/序列化而不是请求,当您想再次尝试时,需要重新构建http请求。(不要尝试序列化ASIHTTPRequest,您已经重新构建它)