在Realm中将一个对象链接到多个

Bła*_*żej 6 realm ios swift

我停下来有很多方向.我已经设法使用函数'linkingObjects'来做到这一点,但自上次更新以来,它已被弃用,我应该使用对象'LinkingObjects'.

停止

class Stop: Object {
    dynamic var name:String = ""
    var directions = List<Direction>()

    override static func primaryKey() -> String? {
        return "name"
    }
}
Run Code Online (Sandbox Code Playgroud)

旧方向

class Direction: Object {
    dynamic var tag:String = ""
    var stop:Stop? {
        return linkingObjects(Stop.self, forProperty: "directions").first
    }
}
Run Code Online (Sandbox Code Playgroud)

当我将我以前的方法应用于新对象时,我总是得到 nil

LinkingObjects返回nil的新方向

class Direction: Object {
    dynamic var tag:String = ""
    let stop = LinkingObjects(fromType: Stop.self, property: "directions").first //always return nil
}
Run Code Online (Sandbox Code Playgroud)

但是在这里我得到一个元素的数组.所以它应该工作.

LinkingObjects返回nil的新方向

class Direction: Object {
    dynamic var tag:String = ""
    let stops = LinkingObjects(fromType: Stop.self, property: "directions")
}
Run Code Online (Sandbox Code Playgroud)

还有其他方法可以使用'LinkingObjects'而不是最后一个例子,因为每次使用'direction.stop.first?.name'而不是'direction.stop?.stop'?

当然,我可以使用"方向"功能,总是选择"停止"中的第一个元素,但也许我不必.

UPDATE

与此同时,我正在使用它.这不是理想的解决方案,但有效.

private let stops:LinkingObjects<Stop> = LinkingObjects(fromType: Stop.self, property: "directions")
var stop:Stop? {
    return self.stops.first
}
Run Code Online (Sandbox Code Playgroud)

mar*_*ius 2

您现在自己想出的解决方案是您能做的最好的解决方案。

我们讨论了是否应该为单一反向链接公开任何其他 API,但由于无法在数据存储层上强制执行其多重性,因此到目前为止没有意义。此外,您仍然需要一个包装器对象,以便我们可以传播更新。LinkedObjects出于这个原因,到目前为止,似乎只有一种统一的方式来检索值。

  • 这看起来确实应该明确地出现在最新版本的发行说明和文档中! (4认同)