Mar*_*k L 1 json caching ios swift
我正在处理一些经常更新的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
}
Run Code Online (Sandbox Code Playgroud)
我尝试将我的请求更改为以下内容:
var request = init(formulaAPI: NSURL, cachePolicy: NSURLRequestCachePolicy, timeoutInterval: NSTimeInterval)
Run Code Online (Sandbox Code Playgroud)
但这会导致错误:"在声明之前使用局部变量'request'"
任何帮助搞清楚这一点将不胜感激!
而不是创建您的请求,
NSURLRequest(URL: formulaAPI!)
Run Code Online (Sandbox Code Playgroud)
您应该使用以下方法,以便您可以显式设置缓存策略.
var request = NSURLRequest(URL: formulaAPI!, cachePolicy: .ReloadIgnoringLocalCacheData, timeoutInterval: 30)
Run Code Online (Sandbox Code Playgroud)
NSURLRequest(URL:)使用默认的来源策略,NSURLRequestUseProtocolCachePolicy以及60秒的超时间隔.
| 归档时间: |
|
| 查看次数: |
1852 次 |
| 最近记录: |