問題タブ [nsurlcache]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ios6 - AFURLConnectionOperation + NSURLConnection は、iOS5.1 と iOS6.0 で動作が異なりますか?
iOS6、AFNetworking、および NSURLConnection で意味をなさない問題が発生しています。
問題を再現するには
- リクエストを作成し、リクエストが成功することを確認します
- インターネット接続をオフにする
- アプリを再度起動し、同じリクエストを再度行います
iOS5.1
データは [NSURLCache からだと思います] 取得され、connectionDidFinishLoading
呼び出されます。
iOS6.0
データは取得されず [NSURLCache の Cache.db がそのイメージを sqlite db に blob として持っていることを確認しました]、connection:didFailWithError:
呼び出されます。
NSURLConnection、NSURLRequest、または NSURLCache のいずれかに関連する変更があったことを示唆するような API 差分は見つかりませんでした。
その結果、アプリが 5.1 でオフラインで実行されると成功ブロックが呼び出されますが、iOS6.0 では失敗ブロックが呼び出されます。
アップデート
NSURLConnection、NSURLRequest、または NSURLCache の動作が異なることを確認するテストを作成しました。
nsurlconnection - 最初のリクエストで NSURLRequestReturnCacheDataElseLoad がキャッシュから読み込まれませんか?
リモート API から多くの情報を取得する必要がある iOS アプリを作成しています。完全に問題なくキャッシュできる多くの http リクエストがありますが、NSURLConnection
十分に積極的にキャッシュしていないようです: アプリを強制終了して再起動するたびに、すべてのリクエストがキャッシュ (iOS 5はディスク キャッシュを使用する必要があります)。同じリクエストを (アプリの有効期間内に) 2 回行うと、キャッシュから取得されます。
ポリシーを使用してNSURLRequestReturnCacheDataElseLoad
おり、http サーバーのキャッシュ制御ヘッダーが設定されているため、すべてをキャッシュできます。
したがって、問題は、アプリが起動するたびにすべてのリクエストが再度行われることです。これがディスクから来ないのはなぜですか?
編集: この問題は、URL にクエリがある場合にのみ発生するようです。たとえば、http://www.apple.com/をリクエストすると、すべて問題なく、アプリを新たに起動すると、実際にはリクエストは行われません。http://www.apple.com/?testに変更すると、最初のリクエストが常に行われます。
編集2:TTURLRequest
(three20の一部)のように見えSDURLCache
、解決策です。
ios - NSURLCacheを使用してUIWebViewのローカルアセットをプリロードする
ローカルに保存されたコンテンツ(HTMLファイル)をUIWebViewに表示するiOSアプリケーションに取り組んでいます。
問題は、HTMLから参照される一部のアセット(フォントや画像など)が初めてロードされるときにかなり時間がかかることです。この問題の解決策は、UIWebViewで使用する前にNSURLCacheを使用してこれらのアセットをキャッシュすることだと思いますが、これにより問題が発生するようです。
私がこれまでに試したこと:
NSURLCacheをサブクラス化
cachedResponseForRequest
し、NSDataオブジェクトにプリロードされたアセットで応答を返すようにオーバーライドします。プリロードはinit
メソッドで行われます。オーバーライドさcachedResponseForRequest
れたものが呼び出されたようですが、何らかの理由でUIWebViewはファイルシステムからアセットをロードします。UIWebViewで使用
storeCachedResponse:forRequest:
される前に、アセットを含むNSCachedURLResponseオブジェクトをキャッシュするために使用します。
これらのどちらも役に立たないようです。問題を探す場所について何かアドバイスはありますか?
objective-c - NSURLRequest apparently cached in Cache.db but requested again
I am using this block for a synchronous image downloading in an iOS 5 app. The logic is simple, if image is in cache use it, if not download it, I suppose NSURLRequestReturnCacheDataElseLoad has exactly this behavior.
I did a test with three images. When I am downloading them for first time, I can see the message 'downloaded MyimgName1.jpg' 'downloaded MyimgName2.jpg' 'downloaded MyimgName3.jpg', and by opening the Cache.db I can see all my images correctly stored in it.
However when I am trying to download again, only the very first downloaded images show the message 'MyimgName1.jpg found in cache', which means that the cachedResponse is nil for all the other 2 and 3 request:
am I missing something in the settings or creation of NSCache ?
iphone - 拡張 NSURLCache はパラメーターを使用できません
クラス URLCache extends NSURLCache があります
URLCache.m で
Am が URLCache.m を呼び出した場合、A は param _pageType を URLCache に送信する必要があります。_pageType を送信する方法がわかりません。
でもいつも午前中
得た
キャッチされない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: '-[NSURLCache setPageType:]: 認識されないセレクターがインスタンス 0xabd1470 に送信されました'
param を NSURLCache に送信できないのはなぜですか?
_pageType を送信するには?
objective-c - NSURLCache からのデータを使用する
NSURLCache をセットアップし、共有キャッシュを初期化されたキャッシュに設定しました。
NSURLConnection デリゲートでサイズをログに記録すると、キャッシュ サイズが大きくなっていることがわかります。
同じデータをリクエストすると、なぜか再度サーバーにリクエストが行われ、キャッシュサイズのログにログがそのままのサイズで表示されます。
これは、キャッシュが正しく機能していることを示していますが、何らかの理由で URL ローダーがキャッシュからプルしていません。
リクエストでデフォルトのキャッシュ ポリシーを使用し、レスポンスのヘッダーを再確認しました。
ここを読んだ後、他の人が同じ問題に言及し、メモリ容量とディスク容量を同じ値に設定すると問題が解決するのを見ましたが、私にとってはうまくいきません。キャッシュからプルするのではなく、毎回新しいリクエストが行われています。
代わりに、リクエストを行う前にデータのキャッシュをチェックするのが賢明でしょうか? NSURLRequest メソッドに対する cachingPolicy パラメータのポイントがわかりません。
memory - NSURLCache:キャッシュ、isnt、およびメモリ統計の変更なしを示します
NSURLCacheのメモリ統計をログに記録してURLキャッシュを確認しようとしています。
ベースNSURLCacheを次のように拡張しました。
次を実行するボタンコードもあります。
ビューのいくつかのテストボタンをクリックしてURLConnectionイベントを発生させると、これらのメソッドが正しいURLで呼び出されているのがわかります。ただし、キャッシュメモリとディスク使用量の統計は変更されません。
ログからの例
これは私に信じさせます:
1-何か間違ったことをしていて、キャッシュの動作を正しく観察していません
2-このキャッシュは実際にはキャッシュされていません
どんな考えでも大歓迎です。
iphone - iOSのメモリ警告でURLキャッシュをクリアする
NSURLCache
メモリ警告を受け取ったときに共有をクリアすることは良い習慣ですか?このようなもの:
これによってディスクキャッシュも不必要にクリアされると想定するのは正しいですか?
もしそうなら、メモリキャッシュのみをクリアすることは可能ですか?
ios - HTML5 アプリケーション キャッシュを照会する方法はありますか?
HTML5 アプリケーション キャッシュの内容を照会する方法はありますか?
キャッシュされた Web コンテンツを大量に使用する iOS アプリケーションを作成しています。アプリがオフラインのときに特定のページを読み込む前に、ページがキャッシュに存在するかどうかを確認したいと思います。そうでない場合は、そのコンテンツを表示するにはオンラインである必要があることをユーザーに通知します。もしそうなら、先に進んでロードします。
現在、iOS には独自の URL キャッシュ システムがあり、最初は次の方法でキャッシュの内容を確認できると思っていました。
愚かな私。iOS のキャッシュと HTML5 のキャッシュは無関係のようです: -cachedResponseForRequest: URL が HTML5 アプリケーション キャッシュにあることがわかっている場合でも (Safari Web デバッガーを使用して)、要求に対して nil を返します。
では、HTML5 アプリケーション キャッシュの内容をクエリする方法はありますか? Objective-C から関連する JS をいつでも実行できるので、答えが Objective-C コードまたは Javascript を使用するかどうかは問題ではありません。
ios6 - ネイティブのキャッシュ管理と同様に機能する iOS6+ オフライン管理
アプリにオフラインでの使用を追加しようとしています。NSURLRequest / NSURLCache によって行われるすべての作業が必要なだけで、ディスクの保存場所を正確に選択できるため、「/Library/Application Support/whatever」に配置して、削除されることはありません ( iCloud / iTunes で同期されないようにフラグを立てます)。
すべての作業を自分で行わなければならないと感じており、創刊号に出馬しています。NSURLCache は、キーが NSURLRequest であり、値が関連する NSCachedURLResponse である辞書をメモリに保持しています。私も同じことをしていますが、この辞書は基本的な型で構成されていないため、ディスクに書き込むことができません。
そのような辞書をディスクに書き込む方法についてのアイデアはありますか?