1

私はニュースフィードを持つiPhoneアプリに取り組んでいます。このニュース フィードは、私が作成した JSON Web サービス (現在、ラップトップの MAMP で動作しています) から取得されます。

とにかく、MySQL DB を使用して、Apache ファイルシステムに保存されているイメージへの参照を保存します。

私はそれらを非常に特定の方法で保存します。これが私が保存する方法です。

フル画像:ng_(postid)_(seqid)
親指:tng_(postid)_(seqid)

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

私はおそらくそれをあまり明確にしませんでした...例:

最初の投稿の画像ファイルは次のようになります

ng_1_1.jpg
ng_1_2.png
ng_1_3.jpg

2 番目の投稿の画像ファイルは次のようになります。

ng_2_1.jpg
ng_2_2.png
ng_2_3.gif

これは今までうまく機能していましたが、投稿を削除して、その場所に投稿を再作成するとどうなるかを確認しようとしましたか?

「Old Post」という名前の投稿があり、2 つの画像があり、postid が 7 であるとします。

画像は次のようになります。

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 のキャッシュを消去するように指示します (必要な場合)。

では、私の質問は、SDWebImage のキャッシュを削除したり、キャッシュされたバージョンを表示した後にサーバーをチェックしたりするにはどうすればよいですか?

4

1 に答える 1

0

あなたの PostID 値はシステム内で一意ではなく、それが問題の原因になっていると思います。一意の PostID 値がある場合、特定の ID を持つ投稿を削除して、その ID 値を新しい投稿に割り当てることは不可能です...
私の意見では、PostID は再利用可能であってはなりません。古い ID で新しい ID を作成し、ある日、システムで上書きされた注文 ID を提供する顧客からの電話を受けましたか?

もう 1 つは、クライアント側でキャッシュされたイメージを決して削除してはならないということです。ただしcacheMaxCacheAge、SDWebImage を指定して、古い未使用のイメージを取り除くことができます。removeImageForKey:たとえば、ユーザーが自分のデバイスで特定の投稿を削除することを決定したときに、特定の画像を削除することもできます。

最後に、あなたが説明しているケースは、特定の投稿の更新に関連しているため、投稿はたとえば異なる画像セットを取得できます。そのシナリオでできる最も簡単なことは、一意の画像 ID を使用することです。そのため、投稿がダウンロードされると、新しい画像がダウンロードされます (古い画像は、キャッシュが最大保存期間に達すると削除されます - を探しますcacheMaxCacheAge)。または、DB/JSON に一種の同期メカニズムを導入することもできます (たとえば、タイムスタンプに基づいて: 投稿がダウンロードされ、アプリケーション キャッシュに保存されている投稿よりも新しいタイムスタンプがある場合、古いリソースを削除し、新しい画像、テキスト、など...タイムスタンプが等しい場合は、既にダウンロードしたデータで問題ありません)。

高度なソリューションでは、 RestKitと Core Data を使用して、ユーザーが投稿をオフラインで参照し、Web リソース (JSON) が変更されたときにコンテンツ (画像、テキスト) を更新できるようにします。

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

于 2011-10-26T13:37:39.813 に答える