Моя текущая настройка: TabViewController, который подключен к двум TableViewController, встроенным в контроллеры навигации. Я могу обновить просмотр таблицы без проблем, при загрузке приложения и при переключении между различными вкладками. Моя проблема возникает, когда я открываю другой tableviewcontroller для редактирования. Когда я нажимаю «Сохранить» с этого контроллера представления, он обновляет данные и сохраняет все отлично, однако, My tableView не будет обновляться независимо от того, что я пытаюсь, пока я не переключусь между различными вкладками или не закрою и снова не открою приложение.
Я пытался использовать делегаты для запуска обновления, я пытался использовать NSNotificationCenter, а не кубики.
У кого-нибудь еще была эта проблема?
Вот моя функция сохранения :
func saveDose(completion: (_ finished: Bool) -> ()) {
if searchName == "" {
guard let managedContext = appDelegate?.persistentContainer.viewContext else { return }
let dose = Dose(context: managedContext)
let doseNumberString = numberDosesText.text
let doseNumberInt = Int64(doseNumberString!) ?? 0
dose.name = nameText.text
dose.script = scriptText.text
dose.dosage = dosageText.text
// dose.doseInterval = doseInterval
dose.firstDose = datePicker.date
dose.numberDoses = doseNumberInt
dose.doseReminder = remindersSwitch.isOn
do {
try managedContext.save()
print("Data Saved")
completion(true)
} catch {
print("Failed to save data: ", error.localizedDescription)
completion(false)
}
} else {
update(name:searchName, firstDose: searchDate)
completion(true)
}
}
И вот где я вызываю его и загружаю обратно в мой другой просмотр таблицы.
@IBAction func saveBtnPressed(_ sender: UIBarButtonItem) {
saveDose { (done) in
if done {
print("We need to return now")
navigationController?.popViewController(animated: true)
self.dismiss(animated: true, completion: nil)
} else {
print("Try again")
}
}
}
И здесь я перезагружаю мой просмотр таблицы, когда появляется представление
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
print("View has been loaded back from other view")
self.fetchData()
self.tableView.reloadData()
print("View will appear")
}
А вот мои функции fetchData и loadData
func fetchData() {
loadData { (done) in
if done {
setEmptyView(Array: logArray.count)
}
}
}
func loadData(completion: (_ complete: Bool) -> ()) {
guard let managedContext = appDelegate?.persistentContainer.viewContext else { return }
let request = NSFetchRequest<NSFetchRequestResult>(entityName: "Log")
do {
logArray = try managedContext.fetch(request) as! [Log]
print("Data Fetched No Issues")
completion(true)
} catch {
print("Unable to fetch data: ", error.localizedDescription)
completion(false)
}
}
Опять я пробовал делегаты и использовал этот код в других приложениях, которые работали нормально. Это как-то связано с контроллером панели вкладок?
Данные явно сохраняются нормально, я просто не могу заставить tableView корректно обновляться.
Кажется, что он не вызывает Функция viewWillAppear после сохранения. Я также пытался использовать делегаты для принудительного обновления таблицы, но ничего не помогало.