Swift清除JSON缓存?

时间:2015-05-29 16:11:57

标签: ios json swift caching

我正在处理一些经常更新的API数据。

我最近发现,当服务器上的数据更新时,手机上的数据无法正常更新。

经过几个小时的小时尝试对此进行问题排查后,我终于尝试从手机中删除该应用,然后重新安装。它确实有效。

经过一些进一步的测试后,我发现它打印出旧的JSON。

删除应用程序并重新安装后,它会成功打印出正确更新的JSON。

由此我得知,手机可能会以某种方式缓存旧的JSON数据。

那么如何在swift中清除此缓存呢?或强迫它提出新的请求。

(我使用swiftyJson,虽然我不认为这与此特定问题有任何关系)

我确实找到了另外一个这样的问题,但它已经老了(2014年在Obj-C中)并且没有答案。

以下是我获取数据的方式:

        var request = NSURLRequest(URL: formulaAPI!)
        var data = NSURLConnection.sendSynchronousRequest(request, returningResponse: nil, error: nil)
        var formula = JSON(data: data!)

        // Loop through the api data.
        for (index: String, portfolio: JSON) in formula["portfolio"] {



            // Save the data into temporary variables
            tempStockName = portfolio["name"].stringValue
            tempTicker = portfolio["ticker"].stringValue
            tempPurchasePrice = portfolio["purchase_price"].floatValue.roundTo(2)
            tempWeight = portfolio["percentage_weight"].floatValue
            latestAPIPrice = portfolio["latest_price"].floatValue.roundTo(2)
            tempDaysHeld = portfolio["days_owned"].intValue

            // Continues on for quite a while, but the data in the above segment is definitely getting filled with old JSON data, so the issue is arising before this point
}

我尝试将我的请求更改为以下内容:

var request = init(formulaAPI: NSURL, cachePolicy: NSURLRequestCachePolicy, timeoutInterval: NSTimeInterval)

但这会导致错误:"使用本地变量'请求'在它的声明"

之前

任何帮助解决这个问题都将非常感谢!

1 个答案:

答案 0 :(得分:9)

而不是使用

创建请求
NSURLRequest(URL: formulaAPI!) 

您应该使用以下方法,以便您可以显式设置缓存策略。

var request = NSURLRequest(URL: formulaAPI!, cachePolicy: .ReloadIgnoringLocalCacheData, timeoutInterval: 30)

NSURLRequest(URL:)使用默认传入策略NSURLRequestUseProtocolCachePolicy,以及60秒的超时间隔。