2013-08-02 70 views
0

我已經嘗試了幾種方法來查看是否需要僅在服務器更新時更新用戶的UITableView數據源。在過去的幾年中,我已經完成了這些場景:1:將一個單獨的.txt文件與一個字符作爲版本#然後通過代碼進行比較並下載新的.plist,然後將該.txt保存到用戶的NSDocumentDirectory中與.plist在將來再次比較,以及2:實際檢查服務器的文件修改日期,這更好,因爲沒有.txt文件與.plist一起下載(下載更好的東西越少)在我的服務器上檢查plist的新版本

但是,現在我想嘗試一種不同的方式來說明我在App Bundle中發佈.plist文件的事實。由於.plist文件創建日期總是晚於新用戶的服務器日期,因此它們不會獲得新的.plist文件,而應用程序的較早用戶將獲取新文件。當然,在第一次應用程序啓動時,我可以獲取服務器的修改日期並覆蓋應用程序,因爲我將它從主包複製到NSDocumentDirectory,但我不認爲我想要去那條路線,因爲我從來不喜歡檢查發射數量。

基本上,它需要繼續在網絡請求時間輕量級,並像我一樣可靠。我正在考慮在.plist中創建一個版本#鍵,並簡單地將它與本地.plist進行比較,但我非常懷疑這將會輕量級,因爲我必須先將整個.plist下載到NSDictionary中,然後才能比較關鍵值。

我真的很抱歉,這篇文章很長,感謝您的幫助!

+0

使用散列 - md5或sha1/2/256 – Kevin

+0

@Kevin請詳細說明還是您可以提供SO鏈接? – klcjr89

+0

此外,如果它有任何關係或使用'NSData dataWithContentsOfUrl'這是一個沒有壞消息。 – klcjr89

回答

1

爲什麼不將該應用程序與data_source.plist文件一起下載並在首次啓動時下載,或者在磁盤上不存在任何其他時間下載(您永遠不知道)。之後,您可以發送HEAD請求並檢查修改日期(甚至可能是電子標籤),並根據需要進行下載。

UPDATE

根據您的控制力服務器,你可以在文件的散列添加到響應報頭(如在評論中提到:MD5,SHA *)沿着側尾-改性。

您可以在構建時將data_source.plist添加到包中,以及last_modified.plist,您可以在其中設置哈希,上次修改以及任何其他想要的元數據作爲起點。

檢查更新可能類似於:

  1. 發送HEAD請求http://server.com/data_source.plist
  2. Last-Modifiedlast_modifed.plist從響應頭(和hash,如果你可以把它)
  3. 驗證對相應的值
  4. 如果需要,下載更新data_source.plist
  5. 如果下載成功更新last_modifed.plist與新的元數據(最後修改,並確保從實際的下載響應頭中拉)。

這樣,用戶就可以開始使用了,應用程序可以在需要時下載資源。

HEAD請求的優點是重量輕,因爲沒有消息正文,但返回與GET請求相同的響應頭。這是檢查資源是否已更新的常用方法。你的場景中的訣竅是在構建時獲取設備的起點。

+1

沒有.plist的郵件對於下載應用程序但打開應用程序並且沒有互聯網連接的用戶來說是個壞消息,這意味着無需下載.plist。請考慮我的原始問題。 – klcjr89

+0

@ troop231也許我早該問過這個文件有多大?幾條或幾千條? –

+0

嘿邁克,大約90 KB,這似乎並不壞,但當你進入像Verizon 3G這樣的高潛力網絡時,它並不是最好的體驗。 – klcjr89

相關問題