簡體   English   中英

收納套裝<CustomObject>到用戶默認值

[英]Storing Set<CustomObject> to UserDefaults

我有一個自定義類,用作Set<ListItem> 我想將其存儲到 userDefaults。 但是,我在Attempt to set a non-property-list object as an NSUserDefaults錯誤。 我嘗試將其更改為Array然后保存它,但仍然出現相同的錯誤。 在看到一些帖子后,我也嘗試保存為數據,這再次給了我以下錯誤。

NSForwarding: 警告: 類 'iTunes_Search_Me.ListItem' 的對象 0x600003bf9a00 沒有實現 methodSignatureForSelector: -- 麻煩提前

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

嘗試將非屬性列表對象設置為 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) } }

您可以嘗試先設置保存的數據:

struct saveData{
   static let encoded = "encoded"
}

然后將其保存在該鍵下:

UserDefaults.standard.set(encoded as! Data, forKey: "encoded")

或嘗試將其另存為字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM