当我尝试使用用户默认值存储字典时出现错误
Getting an error when I try to store a dictionary using user defaults
我正在下载图像并将带有整数的图像的 url 添加到我的字典中。当视图即将消失时,我想使用用户默认值存储数据。不幸的是,我收到错误:“尝试插入 non-property 列表 object ...”,如图所示。
我不明白为什么会出现此错误。
这是我用来下载图片和设置字典的代码。
var imageURLS = [Int: String]()
func downloadImage(url: URL) {
let dataTask = URLSession.shared.dataTask(with: url) { data, responseURL, error in
var downloadedImage:UIImage?
if let data = data {
downloadedImage = UIImage(data: data)
}
// if download actaully got an image
if downloadedImage != nil {
self.sum += 1 // increase the sum by one
self.cache.setObject(downloadedImage!, forKey: url.absoluteString as NSString) // cache the image
// add the sumas key
// add the url as value to the dictionary
self.imageURLS[self.sum] = url.absoluteString
}
}
dataTask.resume()
}
这是我存储和调用字典的代码。
override func viewWillDisappear(_ animated: Bool) {
UserDefaults.standard.set(imageURLS, forKey: "imageUrlDictionary")
}
override func viewWillAppear(_ animated: Bool) {
imageURLS = UserDefaults.standard.object(forKey: "imageUrlDictionary") as? [Int:String] ?? [:]
}
非常感谢您的帮助和建议!
错误的原因是 属性 list keys are required to be String
.
您可以将 Int
值转换为 String
var imageURLS = [String: String]()
...
self.imageURLS[String(self.sum)] = url.absoluteString
我正在下载图像并将带有整数的图像的 url 添加到我的字典中。当视图即将消失时,我想使用用户默认值存储数据。不幸的是,我收到错误:“尝试插入 non-property 列表 object ...”,如图所示。 我不明白为什么会出现此错误。
这是我用来下载图片和设置字典的代码。
var imageURLS = [Int: String]()
func downloadImage(url: URL) {
let dataTask = URLSession.shared.dataTask(with: url) { data, responseURL, error in
var downloadedImage:UIImage?
if let data = data {
downloadedImage = UIImage(data: data)
}
// if download actaully got an image
if downloadedImage != nil {
self.sum += 1 // increase the sum by one
self.cache.setObject(downloadedImage!, forKey: url.absoluteString as NSString) // cache the image
// add the sumas key
// add the url as value to the dictionary
self.imageURLS[self.sum] = url.absoluteString
}
}
dataTask.resume()
}
这是我存储和调用字典的代码。
override func viewWillDisappear(_ animated: Bool) {
UserDefaults.standard.set(imageURLS, forKey: "imageUrlDictionary")
}
override func viewWillAppear(_ animated: Bool) {
imageURLS = UserDefaults.standard.object(forKey: "imageUrlDictionary") as? [Int:String] ?? [:]
}
非常感谢您的帮助和建议!
错误的原因是 属性 list keys are required to be String
.
您可以将 Int
值转换为 String
var imageURLS = [String: String]()
...
self.imageURLS[String(self.sum)] = url.absoluteString