即使在退出视图控制器后,也将数据另存为UserDefault

时间:2017-06-30 01:07:38

标签: ios arrays swift nsuserdefaults

我正在尝试使用一个数组存储从其他VC收到的所有数据。我希望它是这样的,每次我导航到拥有这个存储阵列的VC时,我从其他VC传递的所有数据都存储在这个Store数组中,然后我可以在UITable View中显示。

然后当我导航回我的其他VC并收集数据然后发送回这个存储阵列时,之前的数据不会消失。 但是,通过我的尝试,每次退出VC时数据都会消失。

这是我的尝试:

class ViewController: UIViewController{
    var DataGrab = [String]() //data from other VCs

    func SAVE(){
        UserDefaults.standard.set(DataGrab, forKey: "Save")
        if let ToSave = UserDefaults.standard.value(forKey: "Save") as? [String] {
            print(ToSave)
        }
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        print("DataGrab", DataGrab)
        SAVE()
    }

为什么会这样?

2 个答案:

答案 0 :(得分:0)

首先,让你的阵列出来。然后,将新数据附加到您在UserDefaults中保存的阵列上,最后,在UserDefaults中使用相同的键覆盖该数组

if let ToSave = UserDefaults.standard.stringArray(forKey: "Save"){
    DataGrab += ToSave
    UserDefaults.standard.set(DataGrab, forKey: "Save")
}

答案 1 :(得分:0)

您正在保存数据正确但是当再次加载视图时,您再也没有为它提供价值我想尝试使用

self. DataGrab = UserDefaults.standard.object(forKey: "Save") as! String

然后在您想要的任何地方使用DataGrab,但使用上面的行将已保存的数据放入DataGrab

然后打印DataGrab 当您要检查是否存储值时,在Willappear中尝试打印时运行Didload 试试吧