[英]UserDefault Won't save data in tableView Swift 4
I have been trying to save data when reloading app. 我一直在尝试重新加载应用程序时保存数据。 However some how data won't save. 但是有些数据将无法保存。
my global variable
let defaults = UserDefaults.standard
this is my code on AddTaskView 这是我在AddTaskView上的代码
@IBAction func addTask(_ sender: Any) {
let date = datePicker.date
let dateStr = dateFormatter.string(from: date)
taskArray.append(selectedTask)
dateArray.append(dateStr)
defaults.set(selectedTask, forKey: "task")
defaults.set(dateStr, forKey: "date")
dismiss(animated: true, completion: nil)
}
In my ViewController I have my viewWillApper 在我的ViewController中,我有viewWillApper
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
defaults.string(forKey: "task")
defaults.string(forKey: "date")
tableView.reloadData()
}
If I print the data coming back from AddTaskView It will print on console but data disappear when reloading app 如果我打印从AddTaskView返回的数据,它将在控制台上打印,但在重新加载应用程序时数据消失
tableView.dataSource = self (saved in my viewDidLoad)
this is my tableView 这是我的tableView
public func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: "taskCell", for: indexPath)
cell.textLabel?.text = "\(indexPath.row + 1). \(taskArray[indexPath.row])"
cell.detailTextLabel?.text = dateArray[indexPath.row]
return cell
}
What Am I doing wrong? 我究竟做错了什么?
thanks 谢谢
You have multiple checks to do: 您需要执行多项检查:
defaults.string(forKey: "task")
has a return value that you dont use defaults.string(forKey: "task")
有一个您不使用的返回值
As you append entered data, check if its has been append. 追加输入的数据时,请检查是否已追加。
If entered value is there, check count of rows of the table. 如果输入的值在那里,请检查表的行数。
I believe the key to solve your problem is in one of these points. 我相信解决您的问题的关键在于以下几点之一。
Took me a while but I finally figured 花了我一段时间,但我终于想通了
@IBAction func addTask(_ sender: Any) {
let date = datePicker.date
let dateStr = dateFormatter.string(from: date)
taskArray.append(selectedTask)
dateArray.append(dateStr)
defaults.set(taskArray, forKey: "task")
defaults.set(dateArray, forKey: "date")
defaults.synchronize()
dismiss(animated: true, completion: nil)
}
func loadUserDefaults() {
if let tempStr = defaults.stringArray(forKey: "task") {
taskArray = tempStr as [String]
}
if let tempDateStr = defaults.stringArray(forKey: "date") {
dateArray = tempDateStr as [String]
}
}
override func viewDidLoad() {
super.viewDidLoad()
tableView.dataSource = self
loadUserDefaults()
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.