У меня есть приложение, в котором я пытался использовать UserDefaults
для локального сохранения кодируемой модели , но проблема в том, что UserDefault
не сохраняет все values
модели и присваивает nil
некоторым из них, а иногда назначается value
.Поэтому я решил попробовать альтернативу realm , и я могу изменить свою модель для работы с realm , но у меня возникла проблема, которой нет в процесс из декодирования объекта в объекте с использованием области .Я смог заставить его работать, когда имел дело с Array
объектом с List
, но не array
Объектами просто не удалось для сопоставления с JSON
ниже приведен пример массива, с которым я имею дело
{
"id": 732,
"name": "Vendor Name",
"logo": ".../thumb/missing.png",
"kitchens":
{
"id": 36,
"name": "Sandwiches"
}
}
класс модели
class VendorsList : Object, Decodable {
@objc dynamic var id : Int = 0
@objc dynamic var name : String?
@objc dynamic var logo : String?
// Create your Realm List.
var kitchensList = List<VendorKitchens>()
override class func primaryKey() -> String? {
return "id"
}
private enum CodingKeys: String, CodingKey {
case id
case name
case logo
// Set JSON Object Key
case kitchensList = "kitchens"
}
public required convenience init(from decoder: Decoder) throws {
self.init()
let container = try decoder.container(keyedBy: CodingKeys.self)
self.id = try container.decode(Int.self, forKey: .id)
self.name = try container.decode(String.self, forKey: .name)
self.logo = try container.decode(String.self, forKey: .logo)
// Map your JSON Array response
let kitchens = try container.decodeIfPresent([VendorKitchens].self, forKey: .kitchensList) ?? [VendorKitchens()]
kitchensList.append(objectsIn: kitchens)
}
}
class VendorKitchens : Object, Decodable {
@objc dynamic var id : Int = 0
@objc dynamic var name : String?
override class func primaryKey() -> String? {
return "id"
}
private enum CodingKeys: String, CodingKey {
case id
case name
}
}
эта returns
ошибка
Не удалось сопоставить данные с JSON