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