领域创造和人口序列

时间:2016-09-04 20:02:18

标签: ios swift realm

我正在尝试建立一堆数据领域。这不会是一个问题,但我已经碰壁了 - 我们会说经验上有差距。

创建一条记录很好。但是,该记录的一个字段是来自另一个表的记录的数组(<List>)。现在我的两个问题是:

  1. Realm支持吗?一个列表或对象数组作为记录的字段之一...在这里回答不会让我回答我的问题 - 我只需要制作一个“主键”数组并查询当我需要。如果答案是肯定的,请继续问题2.
  2. 我将如何创建这些列表,请记住,这些表可能比当前表创建的时间晚了几分钟,这意味着这些表尚不存在,因此无法添加到列表...
  3. 示例:

    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>

    谢谢:)

2 个答案:

答案 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")
}