我已经搜索了所有答案,并尝试了所有选项,但仍然无法正常工作。我有一个ViewController,用于从核心数据中删除记录。然后,我从堆栈中删除一个viewcontroller以重新回到tableview上。 tableview仍然有我在行中删除的记录!我已经使用了tableView.reloadData()
中可以想到的viewDidAppear
的所有组合,也没有viewDidLoad
重装数据!如果我备份到上一个表格视图,则数据是正确的,然后继续前进,数据将消失。我的选项用完了,请帮忙。
import UIKit
class showWeekTableViewController: UITableViewController {
var dailyEntry = [DailyEntry]()
var week = Date()
var weekArray = [Date]()
var firstDay = Date()
var hour = Double()
var hoursArray = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
@IBOutlet var weeksTableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
selectedWeekArray()
getDailyEntries()
getHoursArray()
tableView.reloadData()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
selectedWeekArray()
getDailyEntries()
print("viewwillappear")
getHoursArray()
weeksTableView.reloadData()
}
// MARK: - Table view data source
/*
override func numberOfSections(in tableView: UITableView) -> Int {
// #warning Incomplete implementation, return the number of sections
return 1
}
*/
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
// #warning Incomplete implementation, return the number of rows
return 7
}
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = UITableViewCell()
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .short
dateFormatter.dateFormat = "E-MM-dd-yyyy"
let firstDay = dateFormatter.string(from: weekArray[indexPath.row])
let tempHour = hoursArray[indexPath.row]
// Configure the cell...
if tempHour == 0.0 {
cell.textLabel?.alpha = 0.50
cell.isUserInteractionEnabled = false
}
cell.textLabel?.text = ("\(firstDay) \(tempHour)")
return cell
}
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let selectedDay = weekArray[indexPath.row]
performSegue(withIdentifier: "moveToShowSelectedDay", sender: selectedDay)
print("first")
print(selectedDay)
}
/*
// MARK: - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
// Get the new view controller using segue.destination.
// Pass the selected object to the new view controller.
}
*/
func selectedWeekArray() {
var tempWeek = week
for _ in 0...6 {
weekArray.append(tempWeek)
tempWeek = tempWeek + (86400)
}
}
func getDailyEntries() {
if let context = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext{
if let dailyEntries = try?
context.fetch(DailyEntry.fetchRequest()) {
if var tempDailyEntries = dailyEntries as? [DailyEntry] {
tempDailyEntries.sort(by: { $0.date!.compare($1.date!) == .orderedAscending})
dailyEntry = tempDailyEntries
tableView.reloadData()
}
}
}
}
func getHoursArray() {
// load hours for each day in the week
let dateFormatter = DateFormatter()
dateFormatter.dateStyle = .short
dateFormatter.dateFormat = "MM-dd-yyyy"
for x in 0...6 {
for z in 0...dailyEntry.count-1 {
if dateFormatter.string(from: weekArray[x]) == dateFormatter.string(from: dailyEntry[z].date!) {
let tempHours = Double(dailyEntry[z].hours!)!
hoursArray[x] = tempHours
}
}
}
tableView.reloadData()
}
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if let dayVC = segue.destination as? showSelectedDayViewController {
if let selectedDay = sender as! Date? {
dayVC.selectedDay = selectedDay
}
}
}
}
由于控制器缺少代码,我不确定100%,但是您是否覆盖了负责填充表的表委托方法。您能告诉我们整个控制器吗?我们需要同时看到以下两种委托方法。如果正确执行此操作,则tableView将从reload方法重新加载。
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int)
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath)
但是,这个问题可能完全是另外一个问题。请向我们显示控制器的完整代码。
感谢您显示您的完整代码。您的代码似乎有几个问题。您在视图上有2个不同的表吗?您是指两个不同的表WeekendTableView和tableView吗?行数方法需要返回数据集计数(现在您正在编写7。这意味着表将始终是7行大)。您需要从数据集中动态获取计数。
尝试在获取后移动重新加载
而不是您的代码
context.fetch(DailyEntry.fetchRequest()) {
if var tempDailyEntries = dailyEntries as? [DailyEntry] {
tempDailyEntries.sort(by: { $0.date!.compare($1.date!) == .orderedAscending})
dailyEntry = tempDailyEntries
tableView.reloadData()
}
尝试一下
do{
dailyEntry = try context.fetch(DailyEntry.fetchRequest())
} catch {
print("Error loading Daily Entry \(error)")
}
tableView.reloadData()