gpt4 book ai didi

ios - 不需要更新 Realm 中的对象

转载 作者:搜寻专家 更新时间:2023-11-01 07:18:29 26 4
gpt4 key购买 nike

我尝试读取 json 并创建 Realm,所以我的代码:

    func workWithFileJSON () {
//local file JSON
let file = Bundle.main.path(forResource: "MobileDbSchema", ofType: "json")!
let url = URL(fileURLWithPath: file)
let jsonData = NSData(contentsOf: url)!

//Parce JSON
let json = try! JSONSerialization.jsonObject(with: jsonData as Data, options: [])

try! realm.write {

//Create data from JSON to our objects
realm.create(DataRoot.self, value: json, update: true)


}
}

和类文件:

import Foundation
import RealmSwift

class DataRoot: Object {
dynamic var id = 0
dynamic var name = ""
let transport_type = List<Transport_type>()

override class func primaryKey() -> String? {
return "id"
}
}

class Transport_type: Object {
dynamic var id = 0
dynamic var name = ""
let routes = List<Routes>()

override class func primaryKey() -> String? {
return "id"
}
}

class Routes: Object {
dynamic var id = 0
dynamic var name = ""
let directions = List<Directions>()

override class func primaryKey() -> String? {
return "id"
}
}


class Directions: Object {
dynamic var id = 0
dynamic var name = ""
dynamic var dayIdFrom = 0
dynamic var dayIdTo = 0
let stops = List<Stops>()

override class func primaryKey() -> String? {
return "id"
}
}

class Stops: Object {
dynamic var id = 0
dynamic var busStop: BusStop?
let timetable = List<Timetable>()

override class func primaryKey() -> String? {
return "id"
}
}

class BusStop: Object {
dynamic var id = 0
dynamic var name = ""
dynamic var descript = ""

override class func primaryKey() -> String? {
return "id"
}
}

class Timetable: Object {

dynamic var hour = 0
dynamic var minute = 0
dynamic var group_index = 0
dynamic var notes = ""

}

第一次运行后,我在 Realm 中看到了良好的数据:

enter image description here

但在第二次运行后,我在每次运行后的 Timetable x 2 等时间看到数据。

enter image description here

在时间表中没有主键(这里不需要)。为什么每次更新(运行)后我都会在 Timetable 中看到增加的数据以及如何解决我的错误?

最佳答案

即使您的应用不需要主键,Realm.add(_:update:) 也需要您的 Object 类来实现一个,以便它能够识别预先存在的条目而不是新条目。如果您没有指定主键,即使 update: 设置为 true,它也会将 JSON 中的每个项目添加为一个新对象。

理想情况下,您应该能够为 JSON 提要中的每个条目实现某种主要 ID,以便您可以简单地将其传递给 Realm。

但是,如果您无法实现主键,但您知道您下拉的每个新 JSON 对象都是您时间表的完整快照,那么您也可以简单地考虑删除 Realm 文件中所有预先存在的时间表对象在从 JSON 文件添加最新的之前。

关于ios - 不需要更新 Realm 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40486801/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com