2016-03-03 2 views
0

Я использую Alamofire для сетевого запроса. Когда я загружаю новый viewcontroller, я делаю новый запрос в ViewDidAppear, чтобы получить пример url для ect изображений. Когда я делаю запрос в ViewDidAppear, есть задержка до появления данных, я также попытался в ViewDidLoad, запрос был немного быстрее, но вы можете увидеть, как данные появляются после небольшой задержки. Хорошо, что когда пользователь впервые обратится к диспетчеру просмотра, когда пользователь увидит, что данные загружаются, но есть способ сохранить данные, чтобы при выходе пользователя из контроллера, например, когда пользователь возвращается с толчка в навигационном контроллере, а затем снова перемещаться вперед, не делая запрос на получение данных снова?Как сделать запрос сети быстрее в Swift

Вот один из моего запроса в 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() 
     } 



    } 

ответ

1

Попробуйте сделать запрос к сети в предыдущем контроллере представления - скажем, экран загрузки, а затем передать ответ на этот вопрос просмотрите контроллер.

В качестве альтернативы вы можете сохранить ответ в службе кеши по своему усмотрению - когда пользователь перейдет к этому контроллеру просмотра, вы можете проверить его уже в кеше, если он загружает его в представление, если не вызывает запрос.

Кроме того, запрос сети в viewDidLoad будет выполняться быстрее, чем вызывается перед viewDidAppear, но помните, что viewDidLoad вызывается только один раз для определенного экземпляра viewController, где, когда viewDidAppear вызывается каждый раз, когда этот экземпляр отображается снова (например, если это как дно навигационного стека и пользователь нажимает на него).

Имейте в виду, что вы не хотите пережевывать свои данные, поэтому, если вы знаете, что запрос будет иметь тот же ответ, вы только хотите сделать запрос http один раз.

Смежные вопросы