我在这里有问题。我有一个包含图片的自定义对象的数组。当我将我的应用程序安装到手机上时,所有图片都在原处,但是当我尝试使用UserDefaults将更改保存到我的阵列中时-所有图片都保存了,图片除外。我发现问题出在解码图片上。它们都变为占位符图片。有人可以帮我说什么错吗?
required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
englishWord = try container.decode(String.self, forKey: .englishWord)
belarusianWord = try container.decodeIfPresent(String.self, forKey: .belarusianWord) ?? ""
englishDefinition = try container.decodeIfPresent(String.self, forKey: .englishDefinition) ?? ""
belarusianDefinition = try container.decodeIfPresent(String.self, forKey: .belarusianDefinition) ?? ""
let data = try container.decodeIfPresent(Data.self, forKey: CodingKeys.wordImage)
if let data = data {
guard let wordImage = UIImage(data: data) else {
throw NSError(domain: "Error decoding logo", code: 0, userInfo: nil)
}
self.wordImage = wordImage
} else {
wordImage = UIImage(named: "placeholder")!
}
}
public func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
let data = UIImage().pngData()
try container.encode(data, forKey: CodingKeys.wordImage)
try container.encode(self.englishWord, forKey: .englishWord)
try container.encode(self.belarusianWord, forKey: .belarusianWord)
try container.encode(self.englishDefinition, forKey: .englishDefinition)
try container.encode(self.belarusianDefinition, forKey: .belarusianDefinition)
}
此
let data = UIImage().pngData()
是一个空的nil数据,请确保使用真实图像进行处理
在encode(to:)
方法中,只需替换
let data = UIImage().pngData()
与
let data = self.wordImage.pngData()