我有一个自定义类,用作 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/