我正在使用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
}
}
答案 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];