Я стараюсь читать JSON и создать Realm, поэтому мой код:Не нужно обновить объект в 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
х 2 и т. д. после каждого прогона.
В Расписании нет первичных ключей (здесь не нужно). Почему после каждого обновления (запуска) я вижу увеличение данных в Timetable
и как решить мою ошибку?
Потому что вы вставляете «новые данные» в каждый прогон. Решение, не вставляйте «новые» данные в каждый прогон, если он уже добавлен. Царство решило бы это с помощью первичных ключей, но вы сказали, что они вам не нужны. – EpicPandaForce
спасибо за ответ, но когда я добавляю первичный ключ ('dynamic var id = 0' и' override class func primaryKey() -> String? { return "id" } 'для расписания я вижу только одну позицию в результате (и должно быть 1792) –
Ну, первичный ключ идентифицирует один заданный объект, что также означает, что если вы вернете одинаковый идентификатор для всех объектов, тогда все объекты, которые вы читаете, будут идентифицированы как один объект. – EpicPandaForce