用户将项目插入数据库时​​如何刷新tableview?

时间:2019-04-14 19:24:22

标签: swift sqlite

当用户将一个项目插入数据库,然后单击“后退”按钮返回到表视图时,该表视图未显示新项目。我必须停止应用程序,然后再次运行它以显示新项目。我的数据库运行正常,所以我认为这不是问题。

我确实在ViewDidLoad()的mainController中再次重新加载了数据库。我还尝试在ViewDidLoad()中也执行tableView.reloadData(),但这没有任何作用。

class MainViewController: UIViewController, UITableViewDataSource, UITableViewDelegate {

    @IBOutlet weak var tableView: UITableView?
    let mainDelegate = UIApplication.shared.delegate as! AppDelegate


    override func viewDidLoad() {
        super.viewDidLoad()
        // read from the database
        mainDelegate.readDataFromDatabase()

    }

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

        return mainDelegate.people.count

    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {

        let cell = tableView.dequeueReusableCell(withIdentifier: "BookTableViewCell") as! BookTableViewCell

        let rowNum = indexPath.row

        cell.lblTitle?.text = mainDelegate.people[rowNum].title
        cell.accessoryType = .disclosureIndicator

        return cell
    }



class NewBookItemViewController: UIViewController, UITextFieldDelegate, UINavigationControllerDelegate {

    @IBOutlet weak var titletxt : UITextField!

    @IBAction func buttonSave(sender: UIButton){
         // step 18b - instantiate Data object and add textfield data
            let person : Data = Data.init()
            person.initWithData(theRow: 0, thetitle: title)

            let mainDelegate = UIApplication.shared.delegate as! AppDelegate

            // step 18c - do the insert into db
            let returnCode : Bool = mainDelegate.insertIntoDatabase(person: person)      


        }

1 个答案:

答案 0 :(得分:0)

您需要

override func viewWillAppear(_ animated:Bool) {
  super.viewWillAppear(animated)
  mainDelegate.readDataFromDatabase()
  tableView.reloadData()
}

由于viewDidLoad在加载vc时被调用一次,因此考虑到拥有一个dataSource类来处理对数据库的读/写操作,也不是appDelegate的责任,