Ios 将对象保存为用户默认值

Ios 将对象保存为用户默认值,ios,swift,nsuserdefaults,Ios,Swift,Nsuserdefaults,我无法在我的用户默认设置中保存ViewController列表,它将在此userDefault.set(vcList,forKey:“vcList”)处崩溃 错误日志显示: 由于未捕获异常“NSInvalidArgumentException”而终止应用程序,原因:“尝试插入非属性列表对象” 请帮忙 UserDefaults类为访问常见类型提供了方便的方法,例如浮点、双精度、整数、布尔值和URL 默认对象必须是一个属性列表,即NSData、NSString、NSNumber、NSDate、NSA

我无法在我的用户默认设置中保存ViewController列表,它将在此
userDefault.set(vcList,forKey:“vcList”)
处崩溃

错误日志显示:

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


请帮忙

UserDefaults类为访问常见类型提供了方便的方法,例如
浮点、双精度、整数、布尔值和URL


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

的实例。您可以尝试此操作

//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


这两种情况都是不同的如果您试图保存viewController的状态以恢复应用程序状态,那么您做得不对
//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")
        }
    }
override func viewDidLoad() {
        super.viewDidLoad()
        let vcList = viewControllerList()
        self.saveInDefaults(vcList)
    }