将对象保存到用户默认值
Save an Object into User Defaults
我无法在我的用户默认设置中保存 viewController 列表,它在这个 userDefault.set(vcList, forKey: "vcList")
时崩溃了。
错误日志显示:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object
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")
}
}
请帮忙!
UserDefaults class 提供了访问常见类型的便捷方法,例如 floats, doubles, integers, Boolean values, and URLs
。
一个默认对象必须是一个属性列表——也就是说,一个的实例(或者对于集合,实例的组合) NSData, NSString, NSNumber, NSDate, NSArray, or NSDictionary
。如果要存储任何其他类型的对象,通常应该将其归档以创建 NSData
.
的实例
你可以试试这个
//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
调用函数
override func viewDidLoad() {
super.viewDidLoad()
let vcList = viewControllerList()
self.saveInDefaults(vcList)
}
我无法在我的用户默认设置中保存 viewController 列表,它在这个 userDefault.set(vcList, forKey: "vcList")
时崩溃了。
错误日志显示:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object
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")
}
}
请帮忙!
UserDefaults class 提供了访问常见类型的便捷方法,例如 floats, doubles, integers, Boolean values, and URLs
。
一个默认对象必须是一个属性列表——也就是说,一个的实例(或者对于集合,实例的组合) NSData, NSString, NSNumber, NSDate, NSArray, or NSDictionary
。如果要存储任何其他类型的对象,通常应该将其归档以创建 NSData
.
你可以试试这个
//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
override func viewDidLoad() {
super.viewDidLoad()
let vcList = viewControllerList()
self.saveInDefaults(vcList)
}