Проблема обновления TableView после удаления основных данных - PullRequest
0 голосов
/ 28 октября 2019

Я использую Базовые Данные для хранения входных данных от первого VC. Во втором VC я добавил tableView, показывающий все данные, введенные пользователем, и он работает хорошо. В этом же VC у меня есть кнопка «Удалить все данные», которая эффективно удаляет мою полную базу данных Core Data и добавляет -> tableView.reloadData () в действие моей кнопки после удаления всех моих объектов. Мой tableView не обновляется правильно, даже переходя назад и вперед между обоими VC. В ViewDidLoad я также добавил tableView.reloadData (), но ничего не меняется. Обновление tableView работает в одном уникальном случае, если я закрываю свое приложение и перезапускаю его. Любая подсказка о том, что я пропустил?

import UIKit
import CoreData

class DisplayViewController: UIViewController, UITableViewDelegate {

    @IBOutlet weak var tableView: UITableView!
    @IBOutlet weak var deleteDay: UIButton!
    @IBOutlet weak var deleteAll: UIButton!

    var dateOfInputs = [DateOfInputs]()

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        self.tableView.reloadData()
    }

    @IBAction func deleteAllDatabase(_ sender: Any) {

        //getting context from your Core Data Manager Class

        if DateOfInputs.clearAll() {
            dateOfInputs = DateOfInputs.fetchObject()!
            print ("Clear All")
        }

        try? AppDelegate.viewContext.save()

        tableView.reloadData()
    }

    var datas = DateOfInputs.all
    var dateStringArray : [String] = []


    override func viewDidLoad() {
        super.viewDidLoad()

        deleteDay.layer.borderColor = UIColor.white.cgColor
        deleteDay.layer.borderWidth = 3
        deleteAll.layer.borderColor = UIColor.white.cgColor
        deleteAll.layer.borderWidth = 3

       // navigationItem.title = "My Own Data"
       // navigationController?.navigationBar.prefersLargeTitles = true

        datas = DateOfInputs.all

        tableView.reloadData()
    }
}

extension DisplayViewController: UITableViewDataSource {

    func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return datas.count // one row for the input levels and one for comment
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
       let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as! DisplayVCTableviewCell

       let data = datas[indexPath.row]

     // converting my dates to strings

       let dateFormatter = DateFormatter()
       dateFormatter.dateStyle = .long
       dateFormatter.dateFormat = "dd MMMM, yyyy"
       let newDate = dateFormatter.string(from: data.date!)

       cell.myDate.text = (newDate)
       cell.myValues.text = " Sleep: \(data.sleepVal)  Stom.: \(data.stomachVal)  En.: \(data.energyVal)"
       cell.myComment.text = (data.comment)

       return cell
    }
}

1 Ответ

0 голосов
/ 28 октября 2019

Перезагрузить TableView недостаточно. Вам нужно захватить ваш объект с помощью NSFetchRequest.

NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Device"];
self.devices = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
[self.tableView reloadData];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...