2010-07-17 35 views
4

我还没有找到一个回答这个问题的任何地方,但是这似乎是一个典型的问题:iPhone:加载队列在启动时

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

我应该阅读哪些文档才能做到这一点?

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

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

回答

2

我对这个问题的办法是这样的:

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

现在就试试这个。谢谢! – jcdmb 2010-07-17 10:38:02

+0

是的,这很好。谢谢你和凯尔! – jcdmb 2010-07-17 14:38:58

2

我打算假设你已经看过NSOperationQueueNSOperation。 AFAIK没有内置的支持序列化NSOperation,但你可以很容易地编写你自己的序列化机制,用于发布数据的NSOperation子类,并在出现错误时将NSOperationQueueoperationsoperations写入磁盘。

不知道太多细节,很难给出准确的答案。有很多方法可以将数据写入磁盘并在稍后重新加载,您采取的方向将很大程度上取决于您的情况。

+0

谢谢你回答凯尔。是的,我确实有一些关于队列的知识。我的问题是我应该用什么方式“保存”队列并在应用程序启动时再次加载它。我没有这方面的经验。你会推荐我什么? “核心数据”可能有用吗?谢谢! – jcdmb 2010-07-17 06:19:58

+0

看看NSCoding协议。只要你的操作实现了这个协议,他们就可以用[[myQueue operations] writeToFile:@“somefile”]写成] – 2010-07-17 06:25:02

+0

我认为核心数据是解决方案,但是你的建议更简单一些,所以我会试试它。刚开始阅读“档案和序列化编程指南”。感谢凯尔! – jcdmb 2010-07-17 06:35:14