2016-03-23 8 views
0

Ich bin vor ein Problem mit UITableView.Füllen UITableView Zelle aus entfernten Datenbank

Ich möchte dynamisch seine Zellen mit Daten füllen aus einer entfernten Datenbank geholt, so dauert es einige Zeit, bevor die Daten angekommen. Hier

ist der Code:

class MailBoxViewController: UIViewController, UITableViewDelegate, UITableViewDataSource { 

@IBOutlet weak var tableView: UITableView! 

var users: [NSDictionary] = [] 

override func viewDidLoad() { 
    super.viewDidLoad() 

    // call to rest API code to get all users in [NSDictionary] 
    (...) 

    // set table view delegate and data source 
    self.tableView.delegate = self 
    self.tableView.dataSource = self 
} 

// set number of sections within table view 
func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
    return 1 
} 

// set number of rows for each section 
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    if section == 0 { 
     return self.users.count 
    } 
    return 0 
} 

// set header title for each section 
func tableView(tableView: UITableView, titleForHeaderInSection section: Int) -> String? { 
    if section == 0 { 
     return "Users" 
    } 
} 

// set cell content for each row 
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

    // deque reusable cell 
    let cell = tableView.dequeueReusableCellWithIdentifier("myCell", forIndexPath: indexPath) as UITableViewCell 

    // set item title 
    if indexPath.section == 0 { 
     cell.textLabel?.text = self.users[indexPath.row]["firstname"] as? String 
    } 
    return cell 
} 
} 

Das Problem ist, dass, wenn Tableview-Funktionen aufgerufen werden für jeden Abschnitt Anzahl der Zeilen zu setzen und Zelleninhalt für jede Zeile zu setzen, mein [NSDictionary] Benutzer ist noch leer .

Wie könnte ich tun, Zeilen und Zellen nach meinem Anruf nur dann zur API-Code zur Ruhe alle Benutzer erhalten in [NSDictionary] fertig ist?

Vielen Dank für jedes Feedback.

Grüße

Antwort

2

Wenn Sie die Antwort von der API erhalten, sollten Sie self.users = arrayOfUsersYouReceivedFromServer gesetzt und dann self.tableView.reloadData() nennen. Diese

+0

Ja, aber wenn die Datenquellenmethoden das erste Mal aufgerufen werden, ist self.users leer, daher ist es wegen einer Ausnahme außerhalb des Bereichs abgestürzt. – Thomi

+1

Ich sehe nicht, wie Sie sich hier außer Reichweite gehen. Sie geben die Anzahl der Arrays für die Anzahl der Benutzer zurück. Wenn keine Benutzer vorhanden sind, wird die Methode 'cellForRowAtIndexPath:' nicht aufgerufen. – AdamPro13

+0

Sie haben Recht. Ich habe es jetzt, vielen Dank! – Thomi

2

Nach users bevölkert ist, rufen tableView.reloadData(). Dadurch werden Ihre Datenquellenmethoden erneut aufgerufen.

Verwandte Themen