我正在尝试建立一堆数据领域。这不会是一个问题,但我已经碰壁了 - 我们会说经验上有差距。
创建一条记录很好。但是,该记录的一个字段是来自另一个表的记录的数组(<List>
)。现在我的两个问题是:
示例:
class baseRLMObject: Object {
// Creates an id used as the primary key. Also includes a few methods.
}
class Film: baseRLMObject {
var name: String!
var episodeId: Int!
var characters = List<Character>()
}
class Character: baseRLMObject {
var name: String!
var films = List<Film>()
}
了解如何在角色对象之前首先创建所有电影对象?否则我可以尝试添加一个尚不存在的电影,然后它全部崩溃和烧伤:(我想尝试找一个更好的方法的原因是,我正在处理10个表,几百个记录和可变的连接速度。它在下一个数据检索开始之前等待每个数据检索完成是太长了。因为它们都遇到了同样的问题(内部连接),无论我从哪个开始,它都无法工作...... < / p>
谢谢:)
答案 0 :(得分:0)
正如评论中讨论的那样,您应该能够使用Realm的inverse relationships功能来自动执行此过程的大部分内容:
class baseRLMObject: Object {
// Creates an id used as the primary key. Also includes a few methods.
}
class Film: baseRLMObject {
var name: String!
var episodeId: Int!
var characters = List<Character>()
}
class Character: baseRLMObject {
var name: String!
let films = LinkingObjects(fromType: Film.self, property: "characters")
}
调用character.films
时,将返回其List
属性包含该对象的所有Film
个对象的characters
。
与在对象类型之间维护两个单独的关系列表相比,这更容易和无错误。
答案 1 :(得分:0)
如上所述,对于尚未创建的对象,您应该创建一个仅包含主键的空对象,然后在另一个名为
的网络请求之后重新获取并添加值对于多对多关系,您可以使用Realm的Inverse Relationships在这些对象之间创建链接,如:
class Character: baseRLMObject {
var name: String!
var films = LinkingObjects(fromType: Film.self, property: "characters")
}