Ios 为什么不是';t UserDefaults.standard.set是否保存我的数组?从后台删除应用程序后,数据将被清除
我目前正在使用Swift编写应用程序中的日历。虽然它可以正常工作,因为数据(事件日志)可以输入并添加到一个数组中,该数组将显示在表视图中,但一旦应用程序关闭并从后台删除,当我重新打开它时,事件日志就会消失 我的代码有错误吗Ios 为什么不是';t UserDefaults.standard.set是否保存我的数组?从后台删除应用程序后,数据将被清除,ios,swift,userdefaults,Ios,Swift,Userdefaults,我目前正在使用Swift编写应用程序中的日历。虽然它可以正常工作,因为数据(事件日志)可以输入并添加到一个数组中,该数组将显示在表视图中,但一旦应用程序关闭并从后台删除,当我重新打开它时,事件日志就会消失 我的代码有错误吗 import UIKit import JTAppleCalendar var event = [String]() var userData = false class CalendarViewController: UIViewController, UITableVi
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")
我已经多次尝试添加这一点。这似乎不是问题所在。我也读过,它也不是必需的。TIL:同步不是必需的(它写在函数的文档中)。好。。。这与我所知道的一切背道而驰。英雄联盟我刚刚尝试将它添加到我调用UserDefaults.standard.set的所有地方,但没有任何帮助。还有什么建议吗?@AbelC请查看您的行,该行标记为
//get
实际上没有任何作用?你没有把这个价值放在任何地方。这就是为什么你认为它不能拯救任何东西?因为你没有真正得到保存的值?应该是event=
起作用了!我知道这是我在某个地方错过的一件小事。非常感谢。