Я пытаюсь сохранить данные в базе данных, но есть первая таблица "Actor", которая сохраняет.
Вторая таблица еще не сохраняется. Я не знаю, что я могу забыть, вот мой классный актер:
class Actor: Object, Codable {
@objc dynamic var name: String?
@objc dynamic var nickname: String?
@objc dynamic var image: String?
@objc dynamic var dateOfBirth: Int = 0
@objc dynamic var _powers: String = ""
var powers: [String]?
@objc dynamic var actorName: String?
var movies: [Movie]?
enum CodingKeys: String, CodingKey {
case name = "name"
case nickname = "nickname"
case image = "image"
case dateOfBirth = "dateOfBirth"
case powers = "powers"
case actorName = "actorName"
case movies = "movies"
}
convenience init(name: String, nickname: String, image: String, actorName: String, dateOfBirth: Int, powers: [String], movies: [Movie]) {
self.init()
self.name = name
self.nickname = nickname
self.image = image
self.powers = powers
self.actorName = actorName
self.movies = movies
self.dateOfBirth = dateOfBirth
self._powers = powers.joined(separator: ", ")
}
convenience required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
let name = try container.decode(String.self, forKey: .name)
let nickname = try container.decode(String.self, forKey: .nickname)
let image = try container.decode(String.self, forKey: .image)
let actorName = try container.decode(String.self, forKey: .actorName)
let dateOfBirth = try container.decode(Int.self, forKey: .dateOfBirth)
let powers = try container.decode([String].self, forKey: .powers)
let movies = try container.decode([Movie].self, forKey: .movies)
self.init(name: name, nickname: nickname, image: image, actorName: actorName, dateOfBirth: dateOfBirth, powers: powers, movies: movies)
}
}
мой фильм второго класса:
class Movie: Object, Codable {
@objc dynamic var name: String = "name"
@objc dynamic var year: Int = 0
enum CodingKeys: String, CodingKey {
case name = "name"
case year = "year"
}
convenience init(name: String, year: Int) {
self.init()
self.name = name
self.year = year
}
convenience required init(from decoder: Decoder) throws {
let container = try decoder.container(keyedBy: CodingKeys.self)
let name = try container.decode(String.self, forKey: .name)
let year = try container.decode(Int.self, forKey: .year)
self.init(name: name, year: year)
}
}
И код, который заботится о резервном копировании:
class ItemManager{
var delegate: UpdateDelegate?
func getDataFromURL(url: String){
guard let gitUrl = URL(string: url) else { return }
URLSession.shared.dataTask(with: gitUrl) { (data, response, error) in
guard let data = data else { return }
do {
let decoder = JSONDecoder()
let jsonData = try decoder.decode(Item.self, from: data)
self.delegate?.didUpdate(sender: self, actor: jsonData.actor)
DispatchQueue.main.async {
let realm = try! Realm()
try! realm.write {
realm.add(jsonData.actor)
realm.add(jsonData.actor.movies![0])
}
}
} catch let err {
print("Err", err)
}
}.resume()
}
Как вы видите, я использую кодируемый метод для извлечения данных JSON, который я пытаюсь сохранить
Объект актера успешно сохраняется, я не понимаю, почему объект фильма не сохраняет, я делаю то же самое