插入具有一对一关系的数据 - 领域

Inserting data with one to one relationship - realm

所以我正在尝试设置并预填充一个数据库,以备实际应用程序发布时使用。

我遇到的问题是我无法插入到正在创建关系的字段中,该字段是空的。截图如下:

这些是我的数据模型

保存信息类型的数据模型是另一个对象的键

class sourceRecentData: Object {

    // Name
    dynamic var sourceName: String = ""

    // Description
    dynamic var sourceDesc: String = ""

    // TypeID
    dynamic var type : sourceType?

    // Key
    dynamic var sourceKey: String = ""

    // Enabled
    dynamic var sourceEnabled: Bool = true

    // Unlocked
    dynamic var sourceUnlocked: Bool = false
}

这个对象中的id链接到上面的对象

class sourceType: Object {

    // NewsType
    dynamic var typeOfNews: String = ""


}

我用来执行插入的方法现在只是虚拟数据

func createTopDB() {

    let recentData = sourceRecentData()


    let realm = try! Realm()

    recentData.sourceName = "dfdfd"
    recentData.sourceDesc = "fdfd"
    recentData.sourceKey = "fdfdf"
    recentData.sourceEnabled = true
    recentData.sourceUnlocked = false
    recentData.type?.typeOfNews = "fdfdfd"

    try! realm.write({ () -> Void in
        realm.add(recentData)

    })
}

会不会recentData.type?.typeOfNews = "fdfdfd"不做手术?默认情况下它将是 None "value"。

您需要创建 sourceType 的实例,设置 属性,然后将其分配给 recentData.type

您需要先用相关对象初始化 属性,然后才能在其上写入值。我建议在一个单独的变量中这样做,如下所示,这样你就可以避免写一个可选值 (recentData.type?.typeOfNews = …):

let type = SourceType()
type.typeOfNews = "fdfdfd"
recentData.type = type

您可以这样查询对象:

let realm = try! Realm()
let objects = realm.objects(SourceRecentData).filter("type.id = 1")

PS:我建议以大写字母开头命名您的 类,因为这是 Swift 编程社区中的一般最佳实践,并且更容易区分 类 和变量。我在下面的示例代码中应用了它以使其更易于阅读,因为 SO 的语法突出显示也依赖于该约定。