ios - 储物套装到用户默认值
问题描述
我有一个自定义类,我将其用作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)
}
}
解决方案
您可以将模型设置为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) } }
推荐阅读
- python - 如何调用尚未创建的变量,但运行代码后会创建
- java - 如何从 ArrayList 中删除 StringBuilder 对象?
- flutter - Flutter 无法获取下载地址 firebase-storage
- three.js - 旋转时物体不重叠
- powershell - 使用 Start-Process 运行 .bat 文件时
- html - 如何使用 postgres 数据库中的值动态填充 html 下拉列表?
- bash - 使用 bash 从 ubuntu 上的文件中读取具有未转义字符的 env 变量
- python-3.x - 查找日期范围内的最早日期
- typescript - 如何使用 vscode 在 Yarn2 工作区中调试打字稿?
- amazon-dynamodb - DynamoDBMapper 如何在不分页的情况下获取所有项目