[英]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.