我正在使用Alamofire进行网络请求。当我加载新viewController
时,我在ViewDidAppear
中发出新请求,以获取图片的示例网址等。当我在ViewDidAppear
中发出请求时,数据出现之前有一段延迟,我也试过ViewDidLoad
请求速度稍微快一点,但是你可以看到数据在一小段延迟后出现。可以当用户第一次访问viewController
时用户将看到数据正在加载,但有没有办法保存数据,以便当用户离开控制器时,例如当用户去从推送navigationController
返回,然后再次向前导航而不再请求再次获取数据?
以下是ViewDidAppear
中的一项请求。
希望你们能帮忙 - 谢谢
override func viewDidAppear(animated: Bool) {
navigationItem.backBarButtonItem = UIBarButtonItem(title: "", style: .Plain, target: nil, action: nil)
var parameters = [String: AnyObject]()
if(self.MySelf) {
parameters = ["userId": LoginViewController.CurrentUser.UserID as AnyObject]
}
else {
parameters = ["userId": self.UserID as AnyObject]
}
//GET posts
Alamofire.request(.POST, Config.ApiURL + "getUserPosts?token=" + LoginViewController.CurrentUser.Token, parameters: parameters as! [String : AnyObject]).responseJSON{ response in
print(response)
switch response.result {
case .Success(let data):
let json = JSON(data)
if let posts = json["post"]["data"].array {
self.postArray = posts
self.postArray = self.postArray.reverse()
self.navigationItem.title = json["user"]["firstname"].string! + " " + json["user"]["lastname"].string!
self.User = json["user"]
self.UserPic = self.User["photourl"].string!
}
else {
print("Array is empty")
}
case .Failure(let error):
print("Request failed with error: \(error)")
}
self.ProfilePostColView?.reloadData()
}
}
答案 0 :(得分:1)
尝试在早期的视图控制器中发出网络请求 - 例如加载屏幕,然后将响应传递给此视图控制器。
或者,您可以将响应存储在各种缓存服务中 - 当用户导航回此视图控制器时,您可以在缓存中检查它,如果没有调用请求则将其加载到视图中。
同样在viewDidLoad中调用网络请求会比在viewDidAppear之前调用更快 - 但请记住,viewDidLoad仅针对viewController的特定实例调用一次,其中每次再次显示该实例时都会调用viewDidAppear(例如,如果它作为导航堆栈的底部并且用户按下它的话)。
记住用户 - 你不想咀嚼他们的数据,所以如果你知道请求会有相同的响应你只想做一次http请求。