无法将自定义类数组保存到UserDefaults

问题描述 投票:0回答:1

我正在尝试将自定义类数组保存到UserDefaults但它不起作用。我没有回到if let。我在网上到处看。我正在使用Swift 4.2

extension UserDefaults {
    func saveReciters(_ reciters: [Reciter]) {
        do {
            let encodedData = try NSKeyedArchiver.archivedData(withRootObject: reciters, requiringSecureCoding: false)
            self.set(encodedData, forKey: UD_RECITERS)
        } catch {
            debugPrint(error)
            return
        }
    }

    func getReciters() -> [Reciter] {
        if let reciters = self.object(forKey: UD_RECITERS) as? Data {
            return NSKeyedUnarchiver.unarchiveObject(with: reciters) as! [Reciter]
        } else {
            print("EMPTY RECITERS")
            return [Reciter]()
        }
    }
}

UserInfo = {NSDebugDescription =归档期间捕获异常: - [_ SwiftValue encodeWithCoder:]:无法识别的选择器发送到实例0x600001babcc0

那是我的课:

class Reciter: NSCoding {

private(set) public var name: String
private(set) public var image: UIImage?
private(set) public var surahs: [Surah]
private(set) public var documentID: String

private let quranData = QuranData()

init(name: String, image: UIImage?, surahCount: Int?, documentID: String) {
    self.name = name
    self.image = image
    self.documentID = documentID

    if let surahCount = surahCount {
        surahs = Array(quranData.getAllSurahs().prefix(surahCount))
    } else {
        surahs = quranData.getAllSurahs()
    }
}

func encode(with aCoder: NSCoder) {

}

required init?(coder aDecoder: NSCoder) {

}
}

在我的Surah课上我收到邮件。所有其他属性我成功回来qazxsw poi

ios swift xcode nsuserdefaults swift4.2
1个回答
0
投票

我经常看到开发人员使用enter image description here,这里我以用户为例:

YourDataModel.swift

codeable

UserDefaults.swift

struct User: Codable {
    var userId: String = ""
    var name: String = ""
    var profileImageData: Data? }

将数据转换为json数据... import Foundation extension UserDefaults { /// The current user of the application, see `./Models/User.swift` var currentUser: User? { get { guard let userData = self.object(forKey: #function) as? Data else { return nil } return try? JSONDecoder().decode(User.self, from: userData) } set { guard let newuser = newValue else { return } if let userData = try? JSONEncoder().encode(newuser) { self.set(userData, forKey: #function) } } } } 是函数或值名称,即

#function
© www.soinside.com 2019 - 2024. All rights reserved.