我无法在用户默认设置中保存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")
}
}
请帮助!
答案 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)
}