2011-10-26 19 views
1

私はニュースフィードを持っているiPhoneアプリで作業しています。このニュースフィードは、私が書いたJSON Webサービス(現在私のラップトップのMAMPに住んでいる)から引き出されています。SDWebImageキャッシュを消去します

とにかく、MySQLデータベースを使用して画像への参照を保存します。この画像は、Apacheファイルシステムに保存されています。

私は非常に特定の方法でそれらを格納し、これは私がそれらを格納する方法である:

フルイメージ:ng_(postid)_(seqid)
親指:tng_(postid)_(seqid)

PostIDは、すべてのニュースポストに割り当てられている固有のIDです。 。
SeqIDは、そのニュース投稿の写真で一意のIDです。

私はおそらく非常に明確...たとえば作りませんでした:

最初の投稿内の画像ファイルは、第2のポストのための画像ファイルは次のようになります。この

ng_1_1.jpg 
ng_1_2.png 
ng_1_3.jpg 

のようになります。この

ng_2_1.jpg 
ng_2_2.png 
ng_2_3.gif 

これまでは素晴らしいことでしたが、投稿を削除してその場所に再作成すればどうなるか見てみましたか?

のは、我々は次のようになります7.

それの画像のpostidで、2枚の画像を持っている「オールドポスト」と呼ばれるポストを、持っているとしましょう:

ng_7_1.jpg 
ng_7_2.jpg 

するのは、私たちがいることを削除しましょう新しい投稿を作成しました.3つの画像があり、「新しい投稿」と呼ばれています。

それのイメージは次のようになります。

ng_7_1.jpg 
ng_7_2.jpg 
ng_7_3.jpg 

を今、ここでの問題を付属しています...デバイスが削除された古いポストを閲覧し、この新しい投稿を閲覧した場合、彼らが表示されます最初の2つのイメージはOLD POSTからのイメージです。新しいものではありません。

なぜですか? SDWebImageは、URLが同一であるため、キャッシュされたイメージをディスクから取り出すことを決定します。キャッシュされたバージョンは表示されず、イメージが更新されているかどうかも確認されません。

だから、私はこれには2つの可能な解決策があるうちに働いてきた:

  1. どういうわけかはSDWebImageがキャッシュされたバージョン
  2. 私のJSONでキーを押したパスを表示した後、オンライン画像を確認するために取得、 (必要な場合)

だから私の質問は、SDWebImageのキャッシュを削除する方法、またはキャッシュされたバージョンを表示した後にサーバーをチェックすることですか?

答えて

0

あなたのPostID値があなたのシステムで一意ではないと思うので、問題が起こります。ユニークなPostID値があれば、指定されたIDを持つ投稿を削除し、そのID値を新しい投稿に割り当てることは不可能です...
私の意見ではPostIDを再利用できません。特定の注文を削除する事は想像できますか?彼のシステムでは、古いIDの新しいIDを作成し、ある日、システムに上書きされる注文IDを提供する顧客からの電話を受け取りますか?

その他の点では、クライアントサイドでキャッシュされた画像を決して削除しないでください。ユーザーフレンドリーで、帯域幅とユーザーのデータプランを保存してください(この問題を確認するにはlinkを確認してください)。ただし、SDWebImageにはcacheMaxCacheAgeを指定して、未使用の古い画像を取り除くことができます。たとえば、ユーザーが自分の端末で特定の投稿を削除することを決定した場合は、removeImageForKey:を使用して特定の画像を削除することもできます。

最後に、説明しているケースは特定の投稿を更新することに関連しているため、投稿ではさまざまな画像が設定されます。このシナリオでは、最も簡単な方法はユニークなイメージIDを使用することです。投稿がダウンロードされると、新しいイメージがダウンロードされます(古いものはキャッシュが最大の年齢に達すると削除されます - cacheMaxCacheAgeを探してください)。また、DB/JSONに一種の同期メカニズムを導入することもできます(例えば、タイムスタンプに基づいて、ポストがダウンロードされ、アプリケーションキャッシュに保存されたポストよりも新しいタイムスタンプを持つ場合、古いリソースを削除して新しいイメージ、 etc ...もしあなたが既にダウンロードしたデータでタイムスタンプが等しいなら、あなたは良いです)。

アドバンスドソリューションは、RestKitとコアデータを使用して、ユーザーがウェブリソース(JSON)の変更時に投稿をオフラインで閲覧し、コンテンツ(画像、テキスト)を更新できるようにします。

どのような手紙...私のコメントがあなたに役立つことを願っています:)

+0

ありがとう。もともと私はそれがMySQL自動増分IDを使用するように設計しようとしていました。問題は、それが生成する次のIDをどのように「予測する」ことができるかということでした。 ATM私は次のクエリ 'SELECT max(postid)FROM TABLE;を使用していますが、次の挿入時にそれをインクリメントしていますが、MySQLがどのようにしているのか分かりません。 MySQLは常に、以前に生成されたものより1つ高い値を生成します。この問題を解決する次のMySQL IDを予測する方法を教えていただけたら:) –

+0

次のID btwを計算しなければならない理由は、DBに挿入する前に私のファイルに名前を付けるのに使えるからです。 –

+0

OK I次のIDを取得するには、http://stackoverflow.com/questions/2251463/mysql-php-how-to-get-auto-increment-field-value-before-inserting-data/2251486#2251486を使用します(トランザクション)、私は私のキャッシュ/ IDの問題を解決するはずです –

関連する問題