核心数据删除后TableView刷新问题

时间:2019-10-28 09:21:52

标签: swift tableview

我正在使用Core Data来存储来自第一个VC的输入。在第二个VC中,我添加了一个tableView来显示用户输入的所有数据,并且效果很好。在同一VC中,我有一个Delete all data按钮,该按钮有效地删除了我完整的Core Data数据库并添加了-> 在删除所有我的对象之后,在我的按钮操作中使用tableView.reloadData()。 即使在两个VC之间来回切换,我的tableView也无法正确更新。在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 :(得分:0)

重新加载TableView是不够的。您需要使用NSFetchRequest来抓取对象。

NSManagedObjectContext *managedObjectContext = [self managedObjectContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] initWithEntityName:@"Device"];
self.devices = [[managedObjectContext executeFetchRequest:fetchRequest error:nil] mutableCopy];
[self.tableView reloadData];