Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么不是';t UserDefaults.standard.set是否保存我的数组?从后台删除应用程序后,数据将被清除_Ios_Swift_Userdefaults - Fatal编程技术网

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

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

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

我的代码有错误吗

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=
起作用了!我知道这是我在某个地方错过的一件小事。非常感谢。