重新加载应用时,我一直在尝试保存数据。然而,一些数据如何保存。
my global variable
let defaults = UserDefaults.standard
这是我在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)
}
在我的ViewController中,我有viewWillApper
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
defaults.string(forKey: "task")
defaults.string(forKey: "date")
tableView.reloadData()
}
如果我打印从AddTaskView返回的数据它将在控制台上打印 但重新加载应用程序时数据会消失
tableView.dataSource = self (saved in my viewDidLoad)
这是我的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
}
我做错了什么?
感谢
答案 0 :(得分:0)
您需要进行多项检查:
defaults.string(forKey: "task")
有一个你不使用的返回值
在追加输入数据时,请检查其是否已附加。
如果输入的值存在,请检查表格的行数。
我认为解决问题的关键在于以下几点。
答案 1 :(得分:0)
我花了一段时间,但我终于想到了
@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()
}