在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

这些是我的要求

  1. 从API获取JSON并parsingJSON数据。 这些可以在Alamofire&SwiftyJSON的帮助下完成

  2. 我将在表视图中填充parsing的数据。 它在用户在线时有效。

但是我也想在用户离线时在表格中显示数据。

所以我需要保存parsing数据或JSON数据在我的caching中,我需要在一周或几天内刷新或过期caching。

我不喜欢将JSON存储在我的磁盘中,因为它将被更新。

请build议我最好的方法来实现这个…

你有许多工具已经在你的处置。

NSURLCache

您的所有请求都已存储在NSURLCacheNSURLSessionConfiguration中, NSURLSession存储在Alamofire Manager的sharedInstance中。 这些存储的请求已经遵循所有服务器提供的caching策略规则。 您可以通过在您自己的自定义NSURLSessionConfiguration上设置requestCachePolicy来控制caching行为。 我也build议你阅读这个令人敬畏的NSHipster文章,引导你通过NSURLCache的来龙去脉,以及如何控制它。

创build自定义Manager对象包含在当前的Alamofire 文档中 。

将JSON下载到磁盘

您也可以使用Alamofire.download将JSON直接下载到磁盘,而不是使用Alamofire.request 。 这会将有效负载下载到您在destinationclosures中提供的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方法。