2016-03-03 63 views
0

我正在使用Alamofire進行網絡請求。當我加載一個新的viewcontroller時,我在ViewDidAppear中創建了一個新的請求來獲取圖片等的示例url。當我在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中只對其中的viewDidAppear被稱爲每個再次顯示實例一次的viewController的特定實例調用一次(例如,如果它作爲導航堆棧的底部並且用戶按下它)。

記住用戶 - 你不想咀嚼他們的數據,所以如果你知道請求會有相同的響應,你只需要做一次http請求。

相關問題