我有两个不同的视图控制器,它们都在运行时在viewDidLoad中从Internet下载相同的JSON文件。如何防止在运行时下载相同的JSON文件?
我想阻止他们下载两次相同的文件,但是使用由初始视图控制器下载的第一个JSON文件将它传递给第二个视图控制器。
这样可以缩短我的应用加载时间。
我有两个不同的视图控制器,它们都在运行时在viewDidLoad中从Internet下载相同的JSON文件。如何防止在运行时下载相同的JSON文件?
我想阻止他们下载两次相同的文件,但是使用由初始视图控制器下载的第一个JSON文件将它传递给第二个视图控制器。
这样可以缩短我的应用加载时间。
要实现此目标,您需要制定业务逻辑,例如从MVC的C(控制器)独立下载JSON。
通常会添加一个名为XXXModel的类文件。将此模型用作单例。在这个单例中,您需要实现下载和保存JSON数据的功能。您最好使用以URL命名的密钥将JSON数据保存到本地。
而在你的控制器中,总是调用单例来下载JSON。
您可以创建一个url作为key和bool作为值的单例字典,然后将下载的url保存为true。这样,你可以跟踪你的网址的内容
var isDownloaded = [NSURL : Bool] // singleton in appdelegate
if let url = NSURL(string: urlString) {
if isDownloaded[url] != nil && !isDownloaded[url]! {
if let data = try? NSData(contentsOfURL: url, options: []) {
let json = JSON(data: data)
isDownloaded.updateValue(true, forKey: url) //mark it back to false if you delete the data for some reason.
}
} else {
//get it from memory
}
}
做一个单身人士下载并保存JSON,并在viewDidLoad中去和从单身中获取它。 – ColdSteel