在SWIFT中cachingJSON API的最佳方法是什么?
我需要caching来自API的json数据。 所以我研究了很多并得到这个post 。
我试图在我的应用程序中实现选项1。 但海关经理总是返回零。 我不知道为什么?
之后,我得到了AwesomeCache 。 它说这是一个真棒APIcaching。 但是我不知道如何实现呢? 我提到这个问题 。 我仍然无法弄清楚。
这是我的当前实现看起来没有caching:
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) }
请build议我从API中cachingJSON的最佳方法?
提前致谢!
UPDATE
这些是我的要求
-
从API获取JSON并parsingJSON数据。 这些可以在Alamofire&SwiftyJSON的帮助下完成
-
我将在表视图中填充parsing的数据。 它在用户在线时有效。
但是我也想在用户离线时在表格中显示数据。
所以我需要保存parsing数据或JSON数据在我的caching中,我需要在一周或几天内刷新或过期caching。
我不喜欢将JSON存储在我的磁盘中,因为它将被更新。
请build议我最好的方法来实现这个…
你有许多工具已经在你的处置。
NSURLCache
您的所有请求都已存储在NSURLCache
的NSURLSessionConfiguration
中, NSURLSession
存储在Alamofire Manager
的sharedInstance中。 这些存储的请求已经遵循所有服务器提供的caching策略规则。 您可以通过在您自己的自定义NSURLSessionConfiguration上设置requestCachePolicy
来控制caching行为。 我也build议你阅读这个令人敬畏的NSHipster文章,引导你通过NSURLCache的来龙去脉,以及如何控制它。
创build自定义
Manager
对象包含在当前的Alamofire 文档中 。
将JSON下载到磁盘
您也可以使用Alamofire.download
将JSON直接下载到磁盘,而不是使用Alamofire.request
。 这会将有效负载下载到您在destination
closures中提供的fileURL
。 这将使您完全控制该点后的文件caching。 之后,如果您想遵循服务器提供的caching标头规则,则需要在这些文件周围创build自己的caching策略。
填充表视图
将数据下载到磁盘后,您需要将其加载到NSData
Blob中,并将其parsing为JSON以填充表视图。 这应该是非常简单的。 您需要在开始下载时指定给Alamofire的目标NSURL
。 然后将文件数据加载到NSData blob中。 最后,使用NSJSONSerialization将NSData
对象转换为JSON AnyObject
,可以将其parsing为模型对象以填充表视图。
很明显,您不必“将”JSONparsing为模型对象,但这有助于保护您的表格视图不受格式错误的JSON数据的影响。
为脱机使用存储JSON
如果你坚持这种方法,你需要跟踪你的caching到期date像CoreData或SQLite的东西。 您可以通过将pathcaching到磁盘上的JSON文件来实现此目的,也可以将模型对象直接存储在CoreData或SQLite中。 这可能会相当复杂,我不会推荐这种方法,除非你绝对不想caching你的模型对象。
离线使用
通常,如果您需要将数据caching为脱机使用,则需要将模型对象存储在CoreData等内容中。 您可以使用Alamofire request
方法与responseJSON
序列化程序一起将数据parsing为JSON。 然后你将JSON转换成模型对象。 从那里,你可以将模型对象保存在CoreData中,然后用模型对象填充你的表格视图。
这种方法的好处在于,在设备脱机时访问表视图的情况下,您可以caching所有模型对象。 将这个devise与对你的NSURLCache
查询结合NSURLCache
,看看你的请求是否被caching让你避免不必要的服务器调用和parsing逻辑。
鉴于你原来的问题的更新,我会推荐这种方法。
你可以使用这个caching开源。 它将数据caching在磁盘和内存上。 可以caching许多swifttypes,以及inheritanceNSObject并符合NSCoding协议的自定义类。
https://github.com/huynguyencong/DataCache
实现:首先,它使用NSCache作为memcaching。 NSCache使用像字典。 其次,将caching保存到磁盘,使用NSFileManager方法。