gpt4 book ai didi

ios - Realm 对象中的两个相互关联的关系

转载 作者:行者123 更新时间:2023-11-30 12:44:29 26 4
gpt4 key购买 nike

我对 Realm 相当陌生,我正在尝试找出 REST API 与存储到 Realm 对象之间的交互的正确设计。到目前为止,我有一个 Animal 对象,如下所示:

class Animal: Object, Mappable {
dynamic var id = ""
dynamic var userId = ""
dynamic var name = ""
dynamic var gender = ""
dynamic var breed: Breed?
dynamic var type: Type?

//extra
var mainPhotoIndex = 0


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


required convenience init?(map: Map) {
self.init()
}

}

但是问题是我不确定如何处理 TypeBreed 关系,因为 type 包含所有品种的列表,这意味着为了检索具有相应品种名称和类型名称的动物,我必须在服务器端填充这两个属性,当我在动物对象上只需要检索 的两个名称时,这将使 JSON 对象变得巨大类型品种。我发现的另一种方法是仅保存 String ObjectId,然后在 Realm 数据库中按该 id 进行过滤,但不确定这是否是最佳实践。那么我需要在服务器端传递什么以及我应该如何设计我的动物 Realm 对象?

类型

class Type: Object, Mappable {
dynamic var id = ""
dynamic var name = ""
var breeds = List<Breed>()

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

required convenience init?(map: Map) {
self.init()
}

}

品种

class Breed: Object, Mappable {
dynamic var id = ""
dynamic var name = ""

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

required convenience init?(map: Map) {
self.init()
}

}

最佳答案

你说得完全正确。您的架构以正确的方式设置,但您是正确的,从 JSON 字符串映射 Animal 需要包含 TypeBreed 中的所有内容 也是如此。但在这一点上应该可以妥协。

听起来TypeBreed是两组完全静态的数据,几乎独立于Animal。它们也有主键。既然如此,我建议您下载您需要的 BreedType 的所有内容,并在您第一次需要时将其本地保存到 Realm。

此后,每当您请求 Animal 时,都会使用 JSON 字符串的内容,而不是包含 BreedType 对象的内容相反,可以简单地包含必要对象的主键。然后,当在 ObjectMapper 中执行映射操作时,您可以手动获取这两个键,在 Realm 中查询适当的对象,然后在本地磁盘上将它们完全链接起来。

关于ios - Realm 对象中的两个相互关联的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41805425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com