我有兩個不同的視圖控制器,它們都在運行時在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