Я пытаюсь создать модель для моего приложения, имеющую переменную String и 2 UIImage и enum.с моим кодом приложение вылетает, когда я пытаюсь добавить какой-то элемент.не могли бы вы мне помочь, пожалуйста?Я ищу некоторые решения, но ничего не нашел.до этого кода я использовал NScoding, но теперь у меня должен быть кодируемый для класса UIdocument
import UIKit
class BollettaModel: NSObject, Codable {
enum Bolletta: String {
case elettricita
case gas
case acqua
case telefono
case payTV
case bill
}
var tipo : Bolletta
var costo : String
var data : Date
var immagineBolletta : UIImage
var immagineRicevuta : UIImage
enum CodingKeys: String, CodingKey {
case tipo
case costo
case data
case immagineBolletta
case immagineRicevuta
}
required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
self.tipo = try Bolletta(rawValue: container.decode(String.self, forKey: .tipo)) ?? .elettricita
self.costo = try container.decode(String.self, forKey: .costo)
self.data = try container.decode(Date.self, forKey: .data)
let strBase64 = try container.decode(String.self, forKey: .immagineBolletta)
let dataDecoded = Data(base64Encoded: strBase64,
options: .ignoreUnknownCharacters)!
if let imma = UIImage(data: dataDecoded) {
immagineBolletta = imma
} else { immagineBolletta = UIImage() }
let strBase641 = try container.decode(String.self, forKey: .immagineRicevuta)
let dataDecoded1 = Data(base64Encoded: strBase641,
options: .ignoreUnknownCharacters)!
if let imma = UIImage(data: dataDecoded1) {
immagineRicevuta = imma
} else { immagineRicevuta = UIImage() }
}
func encode(to encoder: Encoder) throws {
var container = encoder.container(keyedBy: CodingKeys.self)
try container.encode(self.tipo.rawValue, forKey: .tipo)
try container.encode(costo, forKey: .costo)
try container.encode(data, forKey: .data)
if let imageData = immagineBolletta.pngData() {
let strBase64 = imageData.base64EncodedString(options: .lineLength64Characters)
try container.encode(strBase64, forKey: .immagineBolletta)
}
if let imageData = immagineRicevuta.pngData() {
let strBase64 = imageData.base64EncodedString(options: .lineLength64Characters)
try container.encode(strBase64, forKey: .immagineRicevuta)
}
}
init(tipo: Bolletta, costo: String, data: Date, immagineBolletta: UIImage, immagineRicevuta: UIImage) {
self.tipo = tipo
self.costo = costo
self.data = data
self.immagineBolletta = immagineBolletta
self.immagineRicevuta = immagineRicevuta
}
}