将对象保存到用户默认值

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)
    }