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

时间:2015-10-28 12:05:02

标签: swift realm

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

我遇到的问题是我无法插入创建关系的字段,字段只是空的。屏幕截图如下:

Screenshot should type field is empty 这些是我的数据模型

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

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)

    })
}

2 个答案:

答案 0 :(得分:5)

您需要首先使用相关对象初始化属性,然后才能在其上写入值。我建议使用如下所示的单独变量,这样就可以避免写入可选值(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的语法高亮也依赖于该约定。

答案 1 :(得分:1)

recentData.type?.typeOfNews = "fdfdfd"不会是非操作吗?默认情况下它将是无“值”。

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