Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/108.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 不需要更新领域中的对象_Ios_Swift_Xcode_Realm - Fatal编程技术网

Ios 不需要更新领域中的对象

Ios 不需要更新领域中的对象,ios,swift,xcode,realm,Ios,Swift,Xcode,Realm,我尝试读取json并创建领域,因此我的代码: func workWithFileJSON () { //local file JSON let file = Bundle.main.path(forResource: "MobileDbSchema", ofType: "json")! let url = URL(fileURLWithPath: file) let jsonData = NSData(

我尝试读取json并创建领域,因此我的代码:

    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 = ""

}
<代码>导入基础 导入RealmSwift 类DataRoot:Object{ 动态变量id=0 动态变量名称=“” 让传输类型=列表() 重写类func primaryKey()->字符串{ 返回“id” } } 类传输类型:对象{ 动态变量id=0 动态变量名称=“” let routes=List() 重写类func primaryKey()->字符串{ 返回“id” } } 类路由:对象{ 动态变量id=0 动态变量名称=“” 让方向=列表() 重写类func primaryKey()->字符串{ 返回“id” } } 类方向:对象{ 动态变量id=0 动态变量名称=“” 动态变量dayIdFrom=0 动态变量dayIdTo=0 让停止=列表() 重写类func primaryKey()->字符串{ 返回“id” } } 类停止:对象{ 动态变量id=0 动态var总线停止:总线停止? 让时间表=列表() 重写类func primaryKey()->字符串{ 返回“id” } } 类BusStop:对象{ 动态变量id=0 动态变量名称=“” 动态变量描述符=“” 重写类func primaryKey()->字符串{ 返回“id” } } 课程表:目标{ 动态var小时=0 动态变量分钟=0 动态var组_指数=0 动态变量notes=“” } 第一次跑步后,我在Realm中看到了良好的数据:

但在第二次运行后,我在
时间表中看到数据,每次运行后的x2等时间


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

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

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


但是,如果你不能实现主键,但是你知道你下拉的每一个新JSON对象都是你的时间表的完整快照,那么你也可以简单地考虑在从JSON文件中添加最新的时间表之前删除你的领域文件中的所有预先存在的时间表对象。每次跑步。解决方案,如果已经添加了“新”数据,则不要在每次运行时插入该数据。Realm会用主键解决这个问题,但您说您不需要。谢谢您的回答,但当我添加主键(

dynamic var id=0
override class func primaryKey()->String?{return“id”}
时,我在结果表中只看到一个位置(必须是1792)主键标识单个给定对象,这也意味着如果您为所有对象返回相同的ID,那么您读入的所有对象都将标识为该单个对象object@EpicPandaForce谢谢,我将尝试为我的JSON创建主键(在JSON中为我的“时间表”创建“id”)