ios - 将 Set<CustomObject> 存储到 UserDefaults

标签 ios arrays swift set userdefaults

我有一个自定义类,用作 Set<ListItem> .我想将其存储到 userDefaults。但是,我得到 Attempt to set a non-property-list object as an NSUserDefaults尝试时出错。我试图将其更改为 Array然后保存它但仍然是同样的错误。在看到一些帖子后,我也尝试了另存为数据,这又给了我以下错误。

NSForwarding: warning: object 0x600003bf9a00 of class 'iTunes_Search_Me.ListItem' does not implement methodSignatureForSelector: -- trouble ahead

class ListItem: Codable ,Equatable, Hashable {
    let wrapperType, kind: String?
    let artistID, collectionID, trackID: Int?
    let artistName, collectionName, trackName: String?
    let trackViewURL: String?
    let artworkUrl30, artworkUrl60, artworkUrl100: String?
    let releaseDate: String?
    let primaryGenreName: String?
    var isSelected: Bool = false
    enum CodingKeys: String, CodingKey {
        case wrapperType, kind
        case artistID
        case collectionID
        case trackID
        case artistName, collectionName, trackName
        case trackViewURL
        case artworkUrl30, artworkUrl60, artworkUrl100, releaseDate, primaryGenreName
    }

    static func ==(lhs: ListItem, rhs: ListItem) -> Bool {
        return lhs.trackID == rhs.trackID
    }

    func hash(into hasher: inout Hasher) {
        hasher.combine(trackID)
    }
}

Attempt to set a non-property-list object as an NSUserDefaults

最佳答案

您可以像这样将模型设置为 UserDefaults:

  • 首先您应该创建模型的实例

  • 然后您可以将模型保存到 UserDefaults:

    let encoder = JSONEncoder()
    if let encoded = try? encoder.encode(listItemInstance) {
        let defaults = UserDefaults.standard
        defaults.set(encoded, forKey: "ListItemObject")
    }
    

    您可以像这样从 UserDefaults 获取模型

    if let savedItem = defaults.object(forKey: "ListItemObject") as? Data {
        let decoder = JSONDecoder()
        if let loadedItem = try? decoder.decode(ListItem.self, from: savedItem) {
            print(loadedItem)
        }
    }
    

关于ios - 将 Set<CustomObject> 存储到 UserDefaults,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56920709/

相关文章:

Swift 枚举 : Getting enum value for string enum from int value

ios - 如何使用 indexPath 访问自定义单元格中的 UiLabel 并将用户数据实现到标签中

ios 3DES加密/解密CBC

ios - swift Firebase 删除观察者

C 初始化数组 C2059

javascript - 检查字符串是否包含数组元素的任何部分

ios - UITextView() 不能定义为 nil?

javascript - 将赛季时间表分成几周而不重复球队比赛

ios - 向 UIAlert 添加操作以引导用户进行设置

swift - 为什么在 firestore 中 if let 语句会更改文档变量的类型?