#swift #sqlite
#swift #sqlite
Вопрос:
Когда пользователь вставляет элемент в базу данных, а затем нажимает кнопку назад, чтобы вернуться к tableview, tableview не отображает новый элемент. Я должен остановить приложение и запустить его снова, чтобы отображался новый элемент. Моя база данных работает отлично, поэтому я не думаю, что это проблема.
Я снова перезагружаю базу данных в MainController внутри viewDidLoad(). Я также пытался выполнить TableView.reloadData() внутри viewDidLoad(), и это ничего не дает.
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.
viewDidLoad
не будет вызываться при возврате из другого представленного UIViewController. Он уже «загружен». Вы можете попробоватьviewWillAppear
. Существуют и другие способы передачи информации обратно в представляющий контроллер.
Ответ №1:
Вам нужно
override func viewWillAppear(_ animated:Bool) {
super.viewWillAppear(animated)
mainDelegate.readDataFromDatabase()
tableView.reloadData()
}
Как viewDidLoad
вызывается один раз при загрузке vc, также AppDelegate не отвечает за выполнение таких действий, учитывая наличие класса источника данных, который обрабатывает чтение / запись из базы данных