Swift: объект не сохраняется в базе данных области - PullRequest
0 голосов
/ 28 июня 2018

Я пытаюсь сохранить данные в базе данных, но есть первая таблица "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, который я пытаюсь сохранить Объект актера успешно сохраняется, я не понимаю, почему объект фильма не сохраняет, я делаю то же самое

1 Ответ

0 голосов
/ 28 июня 2018

Существует специальное ключевое слово для массива объектов для области. В вашем случае замени var powers: [String]? с let powers: List<String> = List<String>() не уверен насчет возможности. Я не нашел никакой информации о возможности массива. Может быть, вам нужно будет обернуть его в RealmOptional, но вам действительно нужно иметь дополнительный массив? То же самое касается кино.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...