Как предотвратить перезапись самой Realm при анализе JSON базы данных Realm в Swift? - PullRequest
0 голосов
/ 26 января 2020

У меня проблема с Царством. Я хочу написать внешний сценарий JSON в моей базе данных Realm с помощью Swift. Но при этом он перезаписывает запись в моей базе данных каждый l oop. Когда я печатаю класс print(songClass), он показывает его правильно, но при этом

class SongR: Object {

    @objc dynamic var id: String?
    @objc dynamic var rawName: String?
    @objc dynamic var title: String?
    @objc dynamic var artist: String?
    @objc dynamic var album: String?
    @objc dynamic var playlist: String?
    @objc dynamic var link: String?

}


let realm = try! Realm()

let songClass = SongR()


if let url = URL(string: "http://somewebsite.com/json.php") {
            URLSession.shared.dataTask(with: url) { data, response, error in
                if let data = data {
                    let jsonDecoder = JSONDecoder()
                    do {
                        let parsedJSON = try jsonDecoder.decode([Song].self, from: data)
                        let main = DispatchQueue.main.async {
                            try! realm.write {
                                for song in parsedJSON {
                                    songClass.id = song.id
                                    songClass.rawName = song.rawName
                                    songClass.title = song.title
                                    songClass.artist = song.artist
                                    songClass.album = song.album
                                    songClass.playlist = song.playlist
                                    songClass.link = song.link
                                    realm.add(songClass)
                                    print(songClass)
                                }
                            }
                        }
                    } catch {
                        print(error)
                    }
                }
            }.resume()
        }

он перезаписывает себя, и я получаю только последнее значение из файла JSON, отображаемого в моей базе данных Realm.

Кто-нибудь знает, как это исправить?

Кроме того, я хочу перезаписывать всю базу данных Realm всеми элементами из файла JSON каждый раз, когда я анализирую / обновляю файл JSON и не добавляйте их к этому. Как мне это сделать?

Заранее спасибо!

1 Ответ

0 голосов
/ 26 января 2020

Нашел решение. let songClass = SongR() должно быть внутри l oop:

let main = DispatchQueue.main.async {
                            try! realm.write {
                                for song in parsedJSON {
                                    let songClass = SongR()
                                    songClass.id = song.id
                                    songClass.rawName = song.rawName
                                    songClass.title = song.title
                                    songClass.artist = song.artist
                                    songClass.album = song.album
                                    songClass.playlist = song.playlist
                                    songClass.link = song.link
                                    realm.add(songClass)
                                    print(songClass)
                                }
                            }
                        }
...