Как перезагрузить tableView после добавления значения в массив в swift 4.0 - PullRequest
0 голосов
/ 17 сентября 2018

Там у меня проблема с перезагрузкой tableView после добавления значения в массив.

Вот мой код

//
//  HomeViewController.swift
//  um
//
//  Created by Arnav on 17/09/18.
//  Copyright © 2018 Arnav. All rights reserved.
//

import UIKit
import Firebase
import FirebaseDatabase
import FirebaseAuth


class HomeTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

    var questions = [Question]()

    override  func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
//       var postQuestion = Question(questionName: "Hi", created_by: "Bye")
//       print(postQuestion.name)
//       print(postQuestion.created)

        loadQuestions()

    }

    var list = ["milk", "bread"]

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {

        return list.count

    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
        cell.textLabel?.text = list[indexPath.row]

        return cell
    }


    func loadQuestions() {
        Database.database().reference().child("questionPosts").queryOrderedByKey().observe(.childAdded) { (snapshot) in
            if let dict = snapshot.value as? NSDictionary {
                //var questionName = dict["name"] as! String
                //var created_by = dict["email"] as! String
                let questionTitle = dict["name"] as? String ?? ""
                let created_by = dict["email"] as? String ?? ""

                self.list.append(questionTitle)
            }
        }
    }

Этот код только что добавил новое значение вМассив списка и табличное представление отображают что из массива списка, но когда я добавляю что-то новое в массив списка и запускаю его на симуляторе, новое значение не

Ответы [ 4 ]

0 голосов
/ 17 сентября 2018

Вам нужно создать точку для просмотра таблицы, и после загрузки данных вы можете позвонить

tableview.reloadData()

В качестве альтернативы, вы можете поместить вышеуказанную функцию в didSet вашего массива, как показано ниже:

var questions = [Question]() {
    didSet {
        // because we perform this operation on the main thread, it is safe
        DispatchQueue.main.async {
            self?.tableView.reloadData()
        }
    }

didSet будет вызываться каждый раз, когда вы что-то меняете в массиве вопросов

0 голосов
/ 17 сентября 2018

Вы можете использовать свойство обозревателя didSet.

var questions = [Question]() {
    didSet {
        Dispatch.main.async {
            self.tableView.reloadData()
        }
    }
}

Для получения дополнительной информации нажмите здесь .

0 голосов
/ 17 сентября 2018

После добавления нового элемента в list, вызовите insertRowAtIndexPaths:withRowAnimation в вашем tableView следующим образом:

self.list.append(questionTitle)
let indexPath = IndexPath(row:self.list.count - 1, section:0)
tableView.insertRowsAtIndexPaths([indexPath], withRowAnimation:.default)
0 голосов
/ 17 сентября 2018
import UIKit
import Firebase
import FirebaseDatabase
import FirebaseAuth



class HomeTableViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {



    var questions = [Question]()

    override  func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
//       var postQuestion = Question(questionName: "Hi", created_by: "Bye")
//       print(postQuestion.name)
//       print(postQuestion.created)

        loadQuestions()
        yourtableView.reloadData()

    }






    var list = ["milk", "bread"]




    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {


        return list.count

    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: "cell")
        cell.textLabel?.text = list[indexPath.row]

        return cell
    }


    func loadQuestions() {
        Database.database().reference().child("questionPosts").queryOrderedByKey().observe(.childAdded) { (snapshot) in
            if let dict = snapshot.value as? NSDictionary {
                //var questionName = dict["name"] as! String
                //var created_by = dict["email"] as! String
                let questionTitle = dict["name"] as? String ?? ""
                let created_by = dict["email"] as? String ?? ""

                self.list.append(questionTitle) 




            }
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...