【发布时间】:2016-11-08 12:18:59
【问题描述】:
我尝试读取 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 中看到了良好的数据:
但在第二次运行后,我在每次运行后看到Timetable x 2 等时间的数据。
在 Timetable 中没有主键(这里不需要)。为什么每次更新(运行)后我在Timetable 中看到增加的数据以及如何解决我的错误?
【问题讨论】:
-
因为您在每次运行时都插入“新数据”。解决方案,如果已经添加了“新”数据,请不要在每次运行时插入。 Realm 会用主键解决这个问题,但你说你不需要它们。
-
感谢您的回答,但是当我为时间表添加主键(
dynamic var id = 0和override class func primaryKey() -> String? { return "id" }时,我在结果表中只看到一个位置(并且必须是 1792) -
一个主键标识单个给定对象,这也意味着如果您为所有对象返回相同的 ID,那么您读入的所有对象都将被标识为该单个对象
-
@EpicPandaForce 谢谢,我会尝试为我的 JSON 创建主键(在我的 JSON 中为我的“时间表”创建“id”)