2011-10-26 79 views
1

我正在研究一個具有新聞提要的iPhone應用程序。這條新聞來自我寫的JSON網絡服務(目前居住在筆記本電腦上的MAMP上)。清除SDWebImage緩存

無論如何,我使用MySQL DB來存儲對我的圖像的引用,這些引用存儲在apache文件系統中。

我把它們存儲在一個非常特殊的方式,這是我如何存儲他們:

全部圖片:ng_(postid)_(seqid)
大拇指:tng_(postid)_(seqid)

帖子ID是唯一的ID分配給每個消息後。
SeqID是僅對該新聞文章的照片唯一的ID。

我可能沒有做出很明確......例如:

在第一篇文章中的圖像文件可能看起來像這樣

ng_1_1.jpg 
ng_1_2.png 
ng_1_3.jpg 

的圖像文件的第二個職位可能看起來像這

ng_2_1.jpg 
ng_2_2.png 
ng_2_3.gif 

這至今偉大的工作,但我想看看我刪除後會發生什麼,並重新創建一個在它的地方嗎?

比方說,我們有一個叫做「老郵報」的帖子,其中有2個圖像,與7

它的圖像的帖子ID可能是這樣的:

ng_7_1.jpg 
ng_7_2.jpg 

比方說,我們刪除了然後創建一個新的,其中有三個圖像,被稱爲「新郵政」。

它的圖像看起來就像這樣:

ng_7_1.jpg 
ng_7_2.jpg 
ng_7_3.jpg 

現在,來這裏的問題......如果設備已經觀看了舊的文章,這是刪除,然後查看新的崗位上,他們會看到前兩張圖像來自OLD POST。不是新的。

爲什麼? SDWebImage認爲是因爲URL是相同的,因此決定從磁盤中提取緩存的圖像。它甚至不顯示緩存版本,然後檢查圖像是否已更新。

所以,我已經制定了有這兩個可能的解決方案:

  1. 某種方式得到SDWebImage檢查在線圖像,顯示緩存版本
  2. 傳下來的關鍵在我的JSON後,告訴我的應用程序擦拭SDWebImage的緩存(必要時)

所以,我的問題是,你將如何去刪除SDWebImage的緩存,或使其顯示緩存版本後檢查服務器?

回答

0

我認爲你的PostID值在你的系統中並不是唯一的,並且會導致你的問題。如果您擁有唯一的PostID值,則不可能刪除具有給定ID的帖子,並將該ID值分配給新帖子...
在我看來,PostID不應該是可重用的 - 您可以想象一個店員刪除特定訂單在他的系統中,創建一個具有舊ID的新賬戶,並且有一天接到客戶的呼叫,提供他的訂單ID,該ID現在在系統中被覆蓋?

另一件事是,你永遠不應該刪除客戶端的緩存圖像 - 用戶友好,節省帶寬和用戶的數據計劃(檢查這個爲什麼這麼重要)link。但是,您可以爲SDWebImage指定cacheMaxCacheAge以擺脫舊的未使用的圖像。例如,當用戶決定刪除設備上的特定帖子時,您還可以使用removeImageForKey:刪除特定圖像。

最後,您所描述的情況與更新特定帖子有關,因此帖子可以獲得不同的圖像集。在這種情況下,你可以做的最簡單的事情就是使用唯一的圖像ID,所以當下載文章時,將下載新圖像(當緩存達到最大年齡時,舊圖像將被刪除 - 查找cacheMaxCacheAge)。或者,您可以在DB/JSON中引入一種同步機制(例如,基於時間戳:如果下載了帖子並且具有比存儲在應用程序緩存中的帖子更新的時間戳,則刪除舊資源並下載新圖像,文本,等等......如果時間戳相同,那麼你已經下載的數據很好)。

一個先進的解決方案將使用RestKit和核心數據,這將允許用戶脫機瀏覽您的文章,並在您的網絡資源(JSON)更改時更新內容(圖像,文本)。

什麼書信......我只是希望我的意見對你有用:)

+0

謝謝。最初我打算設計它,以便使用MySQL自動遞增的ID。問題是如何「預測」它會產生的下一個ID。 ATM我使用以下查詢'SELECT max(postid)FROM TABLE;'然後增加下一個插入,但我知道這不是MySQL如何做。 MySQL將始終生成比之前生成的高一個數字,而不是比表中的數據高一個。如果你可以告訴我如何預測下一個MySQL ID可以解決這個問題:) –

+0

我需要計算下一個ID btw的原因是,我可以在插入數據庫之前使用它來命名我的文件 –

+0

OK I 'm使用http://stackoverflow.com/questions/2251463/mysql-php-how-to-get-auto-increment-field-value-before-inserting-data/2251486#2251486獲得下一個ID(帶有事務),並且我使用uniqid()生成末尾 –