2017-07-20 82 views
0

我無法用圖像列表填充場景。我使用UIViewController而不是一個tableView來顯示我的界面。想象一下Tinder喜歡的應用程序。沒有tableview。要滾動瀏覽圖像,每個圖像都會被滑動到下一個圖像。Swift:由於URLSession.DataTask遞歸調用ViewDidLoad

我在場景中填充圖像的方式是使用URLSession.DataTask在ViewDidLoad中創建一個POST請求。但是我似乎遇到了多線程問題。

原始代碼:

ViewDidLoad(){ 
     queryService.getProduct { productlist, errorMessage in 

      if !errorMessage.isEmpty { print("Search error: " + errorMessage) } 

      self.products = productlist 
     } 

     // CODE TO initialize View 
     // MORE CODE 
} 

QueryService的包含URLSession.DataTask它調用URL,並進行序列化。該方法已正確實施。我面臨的問題是self.products在「代碼初始化視圖」部分後實例化。它們似乎都在平行運行。因此,這裏是我做過什麼補救修復:

快速修復:

var count = 0 
ViewDidLoad(){ 
    if count == 0 { 
     queryService.getProduct { productlist, errorMessage in 

      if !errorMessage.isEmpty { print("Search error: " + errorMessage) } 

      self.products = productlist 
      self.count = 1 
      self.ViewDidLoad() 
     } 
    } else { 
     // CODE TO initialize View 
     // MORE CODE 
    } 
} 

這工作,但我知道我的速戰速決是不是最好的做法。有關最佳解決方案的任何建議?謝謝。還有一個後續問題:可以像這樣手動調用viewdidload嗎?

+2

,一定不要調用'viewDidLoad'或任何其他生命週期方法自己。 – rmaddy

回答

0

你可以做到這一點功能,但不是`viewDidLoad中

override func viewDidLoad() { 
    super.viewDidLoad() 
    getProductUntilThereIsOneProductAtLeast() 
} 

func getProductUntilThereIsOneProductAtLeast() { 
    if count == 0 { 
     queryService.getProduct { productlist, errorMessage in 

      if !errorMessage.isEmpty { print("Search error: " + errorMessage) } 

      self.products = productlist 
      self.count = 1 
      self.getProductUntilThereIsOneProductAtLeast() 
     } 
    } else { 
     // CODE TO initialize View 
     // MORE CODE 
    } 
}