为什么 UserDefaults.standard.set 不保存我的数组?从后台删除应用程序后,数据将被清除

Why isn't UserDefaults.standard.set saving my array? After the application is removed from background the data is cleared

我目前正在使用 Swift 编写的应用程序中处理日历。尽管它可以正常工作,因为可以输入数据(事件日志)并将其添加到将显示在 table 视图中的数组中,但一旦应用程序关闭并从后台删除,当我重新打开它时,事件日志消失了。

我的代码有没有错误?

import UIKit
import JTAppleCalendar
var event = [String]()
var userData = false

class CalendarViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {

@IBOutlet weak var calendarView: JTAppleCalendarView!
@IBOutlet weak var monthAndYear: UILabel!
@IBOutlet weak var eventTable: UITableView!

override func viewDidAppear(_ animated: Bool) {
    eventTable.reloadData()
}

override func viewDidLoad() {
    super.viewDidLoad()
    configureCalendarView()

    userData = UserDefaults.standard.bool(forKey: "userData")

    if userData == true {
        UserDefaults.standard.object(forKey: "event")  //gets
    }

    else
    {
        event.append("NO USER DATA")
        UserDefaults.standard.set(event, forKey: "event")

        if event[0] == "NO USER DATA" {
            event.remove(at: 0)
            UserDefaults.standard.set(event, forKey: "event")
        }
    }
    eventTable.reloadData()
        }

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return event.count
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
    let cell = UITableViewCell(style: UITableViewCellStyle.default, reuseIdentifier: nil)
    cell.textLabel?.text = event[indexPath.row]
    return cell
}
func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == UITableViewCellEditingStyle.delete
    {
        event.remove(at: indexPath.row)
        UserDefaults.standard.set(event, forKey: "event")
    }
    eventTable.reloadData()
}

如果有必要,这里是允许在数组中输入数据的代码:

class AddEventViewController: UIViewController {

@IBOutlet weak var eventText: UITextField!
@IBAction func addEvent(_ sender: Any) {

    userData = true
    UserDefaults.standard.set(userData, forKey: "userData")

    if eventText.text == ""
    {
    }
    else
    {
        event.append(eventText.text!)
        UserDefaults.standard.set(event, forKey: "event")
    }
}

我尝试使用模拟器和真正的 iOS 设计并重新安装 Xcode,因为我读到这可能是 Xcode 本身的问题.我也试过在所有地方添加 UserDefaults.standard.synchronize(),但是,似乎没有任何效果。

调用set后需要调用synchronize()保存修改

UserDefaults.standard.synchronize()

代码中唯一从 UserDefaults 中获取值的行是...

UserDefaults.standard.object(forKey: "event")

这实际上并没有对该值做任何事情。它得到它......然后把它扔掉。

这会让它看起来像是没有被保存。

改为...

event = UserDefaults.standard.object(forKey: "event")