60

私の iOS アプリでは、NSURLSessionTaskjson データをアプリにダウンロードするために使用しています。ブラウザから直接 URL を呼び出すと最新の json が取得され、アプリ内から呼び出されると古いバージョンの json が取得されることがわかりました。

これはキャッシングのせいでしょうか?NSURLSessionTaskキャッシュを使用しないようにするにはどうすればよいですか。

これは私が使用する呼び出しです:

NSURLSessionTask *task = [[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {

ありがとう!

4

8 に答える 8

82

@runmad からのリンクを読むと、フロー チャートで、ファイルの HEAD が変更されていない場合でも、cachePolicy を設定したときにキャッシュされたバージョンが使用されることがわかります。

Swift3 では、これを機能させるためにこれを行う必要がありました。

let config = URLSessionConfiguration.default
config.requestCachePolicy = .reloadIgnoringLocalCacheData
config.urlCache = nil

let session = URLSession(configuration: config)

これにより、実際にキャッシュされていないバージョンのファイルが得られました。これは、帯域幅の推定計算に必要でした。

于 2017-03-10T15:47:49.427 に答える
0

同じURLのキャッシュ画像を取得していたので、これを行いました

imageView.imageFromUrl(self.shareData.userResponseData["photo"] as! String)

extension UIImageView {

public func imageFromUrl(urlString: String) {

    if let url = NSURL(string: urlString) {

        let request = NSURLRequest(URL: url, cachePolicy: NSURLRequestCachePolicy.ReloadIgnoringLocalCacheData, timeoutInterval: 60.0)

        NSURLConnection.sendAsynchronousRequest(request, queue: NSOperationQueue.mainQueue()) {

            (response: NSURLResponse!, data: NSData!, error: NSError!) -> Void in
            self.image = UIImage(data: data)

        }
    }
}

}

于 2015-09-03T11:44:29.963 に答える