如何防止 Realm 在将 JSON 解析为 Swift 中的 Realm 数据库时覆盖自身?
How to prevent Realm from overwriting itself while parsing JSON to a Realm database in Swift?
我对 Realm 有疑问。我想使用 Swift 将外部 JSON 脚本写入我的 Realm 数据库。但是当这样做时,它会在每个循环中覆盖我数据库中的记录。当我打印 class 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 文件中获取最后一个值。
有人知道如何解决这个问题吗?
此外,我想在每次 parse/update 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)
}
}
}
我对 Realm 有疑问。我想使用 Swift 将外部 JSON 脚本写入我的 Realm 数据库。但是当这样做时,它会在每个循环中覆盖我数据库中的记录。当我打印 class 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 文件中获取最后一个值。
有人知道如何解决这个问题吗?
此外,我想在每次 parse/update 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)
}
}
}