Aru*_*haN 14 json caching ios swift alamofire
我需要在swift中缓存来自API的json数据.所以我研究了很多并获得了这篇文章.
我试图在我的应用程序中实现选项1.但是自定义管理器总是返回零.我不知道为什么?
之后我得到了AwesomeCache.它说这是一个很棒的API缓存.但我不知道如何实现这个?我提到了这个问题.我仍然想不通.
这是我的Current实现在没有缓存的情况下的外观:
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)
}
Run Code Online (Sandbox Code Playgroud)
请建议我从API缓存JSON的最佳方法?
提前致谢!
UPDATE
这些是我的要求
从API获取JSON并解析JSON数据.这些可以在Alamofire和SwiftyJSON的帮助下完成
我将在表视图中填充解析的数据.它适用于用户在线时.
但我想在用户处于离线状态时显示表中的数据.
所以我需要在我的缓存中保存解析数据或JSON数据,我需要在一周或几天内刷新或过期缓存.
我不喜欢将JSON存储在我的磁盘中,因为它会被更新.
请建议我实现这个目标的最好方法......
cno*_*oon 29
您可以使用许多工具.
您的所有请求都已经存储在NSURLCache在NSURLSessionConfiguration对NSURLSession存储在里面sharedInstance的Alamofire的Manager.这些存储的请求已经遵循您正在服务的服务器提供的所有缓存策略规则.您可以通过requestCachePolicy在自己的自定义NSURLSessionConfiguration上设置来控制缓存行为.我还建议你阅读这篇非常棒的NSHipster文章,它将引导您了解NSURLCache的细节以及如何控制它.
Manager当前的Alamofire 文档中介绍了创建自定义对象.
您也可以使用Alamofire.download而不是使用直接将JSON下载到磁盘Alamofire.request.这会将有效负载下载到fileURL您在destination闭包中提供的有效负载.这将使您在该点之后完全控制文件的缓存.如果您想遵循服务器提供的缓存标头规则,则需要在以后围绕这些文件创建自己的缓存策略.
将数据下载到磁盘后,需要将其加载到NSDatablob中并将其解析为JSON以填充表视图.这应该是非常直接的.您需要在NSURL开始下载时指定给Alamofire 的目的地.然后将文件数据加载到NSData blob中.最后,使用NSJSONSerialization将NSData对象转换为JSON AnyObject,可以将其解析为模型对象以填充表视图.
显然,您没有"必须"将JSON解析为模型对象,但这有助于保护表视图不受格式错误的JSON数据的影响.
如果您坚持使用此方法,则需要在CoreData或SQLite等内容中跟踪缓存过期日期.您可以通过缓存磁盘上JSON文件的路径来实现此目的,也可以将模型对象直接存储在CoreData或SQLite中.这可能会变得相当复杂,除非您绝对不想缓存模型对象,否则我不建议使用此方法.
通常,如果需要缓存数据以供脱机使用,则需要将模型对象存储在CoreData之类的内容中.您将使用Alamofire request方法与responseJSON序列化程序一起将数据解析为JSON.然后,您将JSON转换为模型对象.从那里,您将模型对象保存在CoreData中,然后最终使用模型对象填充表视图.
这种方法的好处在于,在设备脱机时访问表视图的情况下,缓存了所有模型对象.将此设计与查询相结合,NSURLCache以查看您的请求是否已缓存,让您避免不必要的服务器调用,并在已生成模型对象时解析逻辑.
鉴于原始问题的更新,我建议采用这种方法.
| 归档时间: |
|
| 查看次数: |
19633 次 |
| 最近记录: |