2010-07-17 76 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