Hallo,
ich bitte um Hilfe. Entweder bin ich blind, dass ich den Fehler nicht erkenne oder keine Ahnung.
Ich habe eine einfache TableView wo verschiedensten Cell's mit Daten aus einer Datenbank gefüllt werden. Wenn ich auf den ViewController zurückkomme (von einer beliebigen anderen Ansicht) dann will ich, dass er die Datenbankabfrage welche ich in der Methode "getData" habe erneut ausführt und sich somit die aktuellsten Daten holt und danach die tableView refreshed. Soweit so gut, ich hab dafür gedacht, ich nehme die viewWillApear Methode. Allerdings ist das komische verhalten, dass wenn ich das Erstre mal auf die Ansicht zurückkomme noch die alten eintrage in der Tabelle sind. Wenn ich jedoch nochmal wegblicke und dann ein zweites mal zurückkomme, dann sind die neuen eintrage da. Kann mir bitte jemand erklären warum das so ist und wie ich es machen kann, dass von Anfang an die neuen Daten angezeigt werden?
Hier mein Code:
Alles anzeigen
ich bitte um Hilfe. Entweder bin ich blind, dass ich den Fehler nicht erkenne oder keine Ahnung.
Ich habe eine einfache TableView wo verschiedensten Cell's mit Daten aus einer Datenbank gefüllt werden. Wenn ich auf den ViewController zurückkomme (von einer beliebigen anderen Ansicht) dann will ich, dass er die Datenbankabfrage welche ich in der Methode "getData" habe erneut ausführt und sich somit die aktuellsten Daten holt und danach die tableView refreshed. Soweit so gut, ich hab dafür gedacht, ich nehme die viewWillApear Methode. Allerdings ist das komische verhalten, dass wenn ich das Erstre mal auf die Ansicht zurückkomme noch die alten eintrage in der Tabelle sind. Wenn ich jedoch nochmal wegblicke und dann ein zweites mal zurückkomme, dann sind die neuen eintrage da. Kann mir bitte jemand erklären warum das so ist und wie ich es machen kann, dass von Anfang an die neuen Daten angezeigt werden?
Hier mein Code:
Quellcode
- class StartViewController: UITableViewController {
- var guestEntries:[GuestEntry] = []
- var indexClicked: Int = 0
- override func viewWillAppear(_ animated: Bool) {
- self.getData()
- self.tableView.reloadData()
- }
- override func viewDidLoad() {
- super.viewDidLoad()
- tableView.register(UITableViewCell.self, forCellReuseIdentifier: "cellIdentifier")
- self.getData()
- self.tableView.reloadData()
- }
- @IBAction func newGuest(_ sender: Any) {
- //Segue im Main.storyboard leitet automatisch weiter auf den AddGuestViewController
- }
- func getData(){
- let guests = PFQuery(className: "Guests")
- guests.order(byDescending: "Name")
- guests.findObjectsInBackground (block: { objects, error in
- if (error == nil) {
- self.guestEntries.removeAll()
- for object in objects! {
- let guestEntry = GuestEntry()
- guestEntry.objectId = object.objectId!
- guestEntry.name = object["Name"] as! String
- guestEntry.payed = (object["Payed"] as! Bool)
- guestEntry.wieselburger = object["Wieselburger"] as! Int
- guestEntry.schwechater = object["Schwechater"] as! Int
- self.guestEntries.append(guestEntry)
- }
- } else {
- if let descrip = error?.localizedDescription{
- self.displayErrorMessage(message: (descrip))
- }
- }
- DispatchQueue.main.async {
- self.tableView.reloadData()
- }
- })
- DispatchQueue.main.async {
- self.tableView.reloadData()
- }
- }
- override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
- indexClicked = indexPath.row
- performSegue(withIdentifier: "showDetails", sender: self)
- }
- override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
- if(segue.identifier == "showDetails") {
- let destVC : DetailViewController = segue.destination as! DetailViewController
- destVC.guestEntry = guestEntries[indexClicked]
- }
- }
- override func numberOfSections(in tableView: UITableView) -> Int {
- return 1
- }
- override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
- return guestEntries.count
- }
- override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
- let cell = tableView.dequeueReusableCell(withIdentifier: "cellIdentifier", for: indexPath)
- if(guestEntries[indexPath.row].payed == false) {
- cell.textLabel?.textColor = .blue
- cell.textLabel?.text = guestEntries[indexPath.row].name
- }else{
- cell.textLabel?.textColor = .black
- cell.textLabel?.text = guestEntries[indexPath.row].name
- }
- return cell
- }