将对象保存为用户默认值

时间:2019-03-04 07:01:04

标签: ios swift nsuserdefaults

我无法在用户默认设置中保存viewControllers列表,它在此userDefault.set(vcList, forKey: "vcList")崩溃。

错误日志显示:

  

由于未捕获的异常“ NSInvalidArgumentException”而终止应用程序,原因:“试图插入非财产列表对象

import UIKit

class ViewController: UIViewController {

    struct viewControllerList {
        var vc1 = ViewController()
        var vc2 = LoginViewController()
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        let vcList = viewControllerList()
        let userDefault = UserDefaults.standard
        userDefault.set(vcList, forKey: "vcList")
    }
}

请帮助!

2 个答案:

答案 0 :(得分:0)

UserDefaults 类提供了用于访问常见类型(例如 floats, doubles, integers, Boolean values, and URLs )的便捷方法。

默认对象必须是属性列表,即 NSData, NSString, NSNumber, NSDate, NSArray, or NSDictionary 的实例(或对于集合而言,是实例的组合)。如果要存储任何其他类型的对象,通常应将其归档以创建 NSData 的实例。

答案 1 :(得分:0)

您可以尝试

//MARK:- Save viewController in UserDefault
    func saveInDefaults(_ viewController : UIViewController) -> Void{
        do {
            let encodeData  = try NSKeyedArchiver.archivedData(withRootObject: self, requiringSecureCoding: false)
            UserDefaults.standard.set(encodeData, forKey: "vcList")
            UserDefaults.standard.synchronize()
        } catch {
            print("error")
        }
    }

viewDidLoad中的Call函数

override func viewDidLoad() {
        super.viewDidLoad()
        let vcList = viewControllerList()
        self.saveInDefaults(vcList)
    }