我需要快速从API缓存JSON数据。
所以我研究了很多,并获得了这个Post。
我试图在我的应用程序中实现选项1。但是海关经理总是返回nil。不知道为什么
之后,我得到了AwesomeCache。它说这是一个很棒的API缓存。
但是我不知道如何实现呢?
我提到了这个Issue。仍然我无法弄清楚。
这是我当前的实现在没有缓存的情况下的样子:
Alamofire.request(.GET, "http://api.androidhive.info/volley/person_array.json")
.responseJSON { (_, _, data, _) in
let json = JSON(data!)
let catCount = json.count
for index in 0...catCount-1 {
let name = json[index]["name"].string
println(name)
}
请建议我从API缓存JSON的最佳方法?
提前致谢!
更新
这些是我的要求
但是我也想在用户离线时在表中显示数据。
因此,我需要将解析后的数据或JSON数据保存在缓存中,并且需要在一周或几天内刷新或终止缓存。
我不希望将JSON存储在磁盘中,因为它将被更新。
请向我建议实现这一目标的最佳方法...
最佳答案
您已经拥有许多可用的工具。
NSURLCache
您的所有请求已存储在Alamofire NSURLCache
的NSURLSessionConfiguration
内存储的NSURLSession
上的sharedInstance
中的Manager
中。这些存储的请求已经遵循您要查找的服务器提供的所有缓存策略规则。您可以通过在自己的自定义NSURLSessionConfiguration上设置requestCachePolicy
来控制缓存行为。我还建议您阅读这篇很棒的NSHipster文章,它引导您了解NSURLCache的来龙去脉以及如何控制它。
将JSON下载到磁盘
您还可以使用Alamofire.download
而不是Alamofire.request
将JSON直接下载到磁盘。这会将有效负载下载到您在fileURL
闭包中提供的destination
中。在那之后,您可以完全控制文件的缓存。如果要遵循服务器提供的缓存 header 规则,则需要围绕这些文件创建自己的缓存策略。
填充表格 View
将数据下载到磁盘后,需要将其加载到NSData
blob中并将其解析为JSON以填充表 View 。这应该很简单。开始下载时,您需要为Alamofire指定的目标NSURL
。然后将文件数据加载到NSData Blob中。最后,使用NSJSONSerialization将NSData
对象转换为JSON AnyObject
,可以将其解析为模型对象以填充表 View 。
存储JSON以供脱机使用
如果您坚持使用这种方法,则需要使用CoreData或SQLite之类的内容跟踪缓存的过期日期。您可以通过在磁盘上缓存JSON文件的路径来完成此操作,也可以将模型对象直接存储在CoreData或SQLite中。这可能会变得相当复杂,除非您绝对不想缓存模型对象,否则我不建议您使用这种方法。
离线使用
通常,如果需要缓存数据以供脱机使用,则需要将模型对象存储在CoreData之类的文件中。您将结合使用Alamofire request
方法和responseJSON
序列化程序将数据解析为JSON。然后,您可以将JSON转换为模型对象。从那里,您将模型对象保存在CoreData中,然后最终用模型对象填充表格 View 。
这种方法的好处是,当设备离线时访问表 View 时,您可以缓存所有模型对象。将此设计与对NSURLCache
的查询结合起来以查看请求是否已缓存,让我们在已经生成模型对象时避免不必要的服务器调用和解析逻辑。
关于ios - 在SWIFT中从API缓存JSON的最佳方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32242148/