UserDefault 不会在 tableView 中保存数据 Swift 4

UserDefault Won't save data in tableView Swift 4

我一直在尝试在重新加载应用程序时保存数据。但是有些数据不会保存。

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
}

我做错了什么?

谢谢

您有多项检查要做:

  1. defaults.string(forKey: "task") 有一个您不使用的 return 值

  2. 当您追加输入的数据时,检查它是否已被追加。

  3. 如果输入的值存在,请检查 table.

  4. 的行数

我认为解决您的问题的关键在于以下几点之一。

花了我一段时间,但我终于想通了

@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()
}