2017-05-31 2 views
0

Ich versuche, eine Tabellenansicht aus einer SQlite-Datenbank zu füllen. Tickets werden in der Konsole gedruckt, aber nichts wird in der Tabellenansicht angezeigt. Was ist der richtige Weg zum Aktualisieren und Aktualisieren? Hier ist mein Code. Vielen Dank!So aktualisieren Sie UITableView mit Swift?

import UIKit 
import SQLite 

class TicketTableViewController: UIViewController, UITableViewDataSource, UITableViewDelegate { 

    var tickets = [String]() 
    @IBOutlet weak var table: UITableView! 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     let dm = DatabaseManager.shared 
     let db = dm.db! 
     do { 
      for row in try db.prepare(dm.tickets) { 
       let ticket = row[dm.pick] 
       tickets.append(ticket) 
       debugPrint(ticket) 
      } 
      table.reloadData() 
     } catch {} 
    } 

    func numberOfSections(in tableView: UITableView) -> Int { 
     return 1 
    } 

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return tickets.count 
    } 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { 
     let cell = tableView.dequeueReusableCell(withIdentifier: "ticket")! 
     cell.detailTextLabel!.text = tickets[indexPath.row] 
     return cell 
    }  
} 
+3

Haben Sie die 'delegate' und' datasource' von tableView gesetzt? Überprüfen Sie auch, ob die Ausgangsverbindung der Tabelle mit TicketTableViewController verbunden ist. –

+0

ein anderes Problem ist, um Sie in Bewegung zu versetzen bewegen Sie Ihren Code in ViewDidLoad zu ViewDidAppear. (Auf jeden Fall nicht den Super vergessen. ...) – Fattie

Antwort

2

Dynamische Tabellenansichten muss ihre Delegierten und Datenquelle kennen. Wenn Sie den Delegaten und die Datenquelle nicht festgelegt haben, können Sie sie programmgesteuert in Ihrer viewDidLoad-Funktion hinzufügen. Wie folgt:

override func viewDidLoad() { 
     super.viewDidLoad() 

     //Set delegate and datasource 
     table.delegate = self 
     table.dataSource = self 

     let dm = DatabaseManager.shared 
     let db = dm.db! 
     do { 
      for row in try db.prepare(dm.tickets) { 
       let ticket = row[dm.pick] 
       tickets.append(ticket) 
       debugPrint(ticket) 
      } 
      table.reloadData() 
     } catch {} 
    }