2017-09-29 15 views
-1

私はhttpリクエストの結果を表示するテーブルを持っています。 クエリが終了する前にテーブルが表示されるため、アプリケーションがクラッシュすることがあります。アプリケーションにクラッシュはありません。iOS - クエリが完了するまで待ちます

テーブル:

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "cell") as! MyCustomCell 
     for i in 0...nameOfRoutesStart.count { 
      if (indexPath.row == i) { 
       cell.originLabel.text = nameOfRoutesStart[i] 
       cell.destinationLabel.text = nameOfRoutesEnd[i] 
       let id = driver[i] 
       self.userTasks.user(driverId: id, completionHandler: { (status, success) -> Void in 
        if success { 
         cell.driverLabel.text = self.userTasks.username 
        } 
       }) 
       cell.textLabel?.lineBreakMode = NSLineBreakMode.byWordWrapping 
      } 
     } 
     return cell 
    } 

は、私はあなたのviewDidLoadにテーブルビュー方法からご非同期コードを抽出し、別の関数に おかげ

+4

**非同期関数を 'cellForRowAt'内で実行しないでください。**代わりに、関数を実行し、データソースをいっぱいにしてからテーブルビューを再読み込みするまで待ちます。 – the4kman

+0

for cellforRowAtIndexPath ...それを避けてください。表示されているセルだけを要求します。 –

答えて

0

を要求を行います。取得したデータをコントローラに宣言された変数に保存し、フェッチが完了したらテーブルビューの.reloadData()を呼び出します。

+0

ありがとう、ありがとう ViewDidLoadで他の行を実行する前に、クエリが実行されるのを待つ方法はありますか。クエリが完了する前にコードが実行されているため、機能しません。 – Loan

+0

クエリに完了ハンドラが必要です。このハンドラは、クエリが完了したときに呼び出され、アプリケーションに返されたデータまたはエラーのいずれかを返します。この時点でデータを作成し、インターフェースをリロードする必要があります。 –

関連する問題