簡體   English   中英

在 Swift 中將 JSON 解析為 Realm 數據庫時,如何防止 Realm 覆蓋自身?

[英]How to prevent Realm from overwriting itself while parsing JSON to a Realm database in Swift?

我在 Realm 上遇到了問題。 我想用 Swift 將外部 JSON 腳本寫入我的 Realm 數據庫。 但是這樣做時,它會在每個循環中覆蓋我數據庫中的記錄。 當我打印類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()
        }

它會覆蓋自己,我只能從 Realm 數據庫中顯示的 JSON 文件中獲取最后一個值。

任何人都知道如何解決這個問題?

此外,每次解析/更新 JSON 文件時,我都想用 JSON 文件中的所有項目覆蓋整個 Realm 數據庫,而不是將它們添加到其中。 我怎么做?

提前致謝!

找到了解決辦法。 let songClass = SongR()需要在循環內:

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)
                                }
                            }
                        }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM