ios - 在 Realm 中查询具有反向关系的对象的正确方法

标签 ios swift realm

我目前在查询存储在反向关系中的数据时遇到问题。我有以下代码

class Form: Object {
    dynamic var id: String = NSUUID().uuidString
    ...
    var answers = List<FormAnswer>()

    override static func primaryKey() -> String? {
        return "id"
    }
...
}

class FormAnswer: Object {
    dynamic var key = ""
    dynamic var answer = ""
    let form = LinkingObjects(fromType: Form.self, property: "answers")

    override static func primaryKey() -> String? {
        return "key"
    }
}

当我创建一个 FormAnswer 对象时,我执行以下操作:

 try! realm.write {
            let answer = FormAnswer(value: ["key": key, "answer": answer, "form" : parentForm!]) // parentForm is of type "form"
            realm.add(answer, update: true)
}

当我尝试查询它时,我什么也得不到!

let previousValue = realm.objects(FormAnswer.self).filter("key == %@ AND ANY form.id == %@", key, parentForm!.id).first?.answer

我已经使用 Realm 浏览器检查了 Realm 文件,并且有一个 FormAnswer 的条目。但是只有 2 个字段(键和答案),而且似乎没有指向我的 Form 对象的链接。

有人知道我该如何解决这个问题吗?

谢谢

最佳答案

LinkingObjects 是一个计算属性,不能直接改变。相反,您可以通过更改关系的另一端来修改其值。

尝试:

try! realm.write {
    parentForm.answers.add(FormAnswer(value: ["key": key, "answer": answer]))
}

这会将新答案直接添加到 Formanswer 列表中,并将导致答案的 form 属性包含 parentForm.

关于ios - 在 Realm 中查询具有反向关系的对象的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46165806/

相关文章:

iOS 什么用于排序列表?

ios - Realm 迁移中的转换错误以将属性 Double 更改为 List<CustomObject>

ios - 如何在 iOS 8 中应用程序处于后台状态时连续执行任务

ios - Swift 3 将图像从 URL 添加到 UIImageView

ios - 设置自定义 TableView 单元格上的复选框

ios - 将本地文件添加到项目文件

Swift 3. Cast Any 到符合特定协议(protocol)的类

ios - 如何从 Realm 对象中复制值以传递给另一个线程

ios - 与 ROS 同步时仅删除本地 Realm

iphone - 如何将一种货币值(value)转换为另一种货币值(value)