Использование TabViewController, при сохранении данных TableView не обновляется - PullRequest
0 голосов
/ 15 января 2020

Моя текущая настройка: 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 после сохранения. Я также пытался использовать делегаты для принудительного обновления таблицы, но ничего не помогало.

Ответы [ 2 ]

0 голосов
/ 15 января 2020

Перезагрузите таблицу в пользовательском методе делегатов, ваша проблема будет решена.

0 голосов
/ 15 января 2020

В основном вам нужно вызвать tableView.reloadData (). после того, как вы сделали сохранение. Кроме того, вы можете использовать beginUpdates, endUpdates в tableView для выполнения анимации в определенных c строках. Для получения дополнительной информации об этом вы можете обратиться к Эта ссылка

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