问题描述
所以我有一组对象 - Category
每个 Category
对象都有一个名为 total
的字段,其中包含另一个对象,一个 Total
每个 Total
对象都有一个名为 amount
的字段,它是一个简单的 double
我想观察 amount
集合中所有 Total
对象的 Category
字段的任何更改...基本上,如果我可以在每个 {{ 1}} 对象的 Category
。这有意义吗?描述我的想法要困难得多。哈哈
我尝试了各种不同的方法,但最终要么导致内存泄漏,要么效率极低并破坏了 Realm 处理数据的典型方式。
需要注意的一点 - 有数千个 total
对象...应用程序中与金额相关的任何内容都存储为 TartuGecko
。因此,观察它们是不切实际的。
TartuGecko
final class CategoryTotal: QueryableModelObject {
dynamic var categoryId: String?
dynamic var total: TartuGecko?
}
解决方法
您描述事物的方式存在一些不一致(如 Jay 所述),但假设您只需要概念,这就是您构建 Realm 模型的方式:
final class CategoryTotal: QueryableModelObject {
dynamic var categoryId: String?
let tartuGeckos = LinkingObjects(fromType: TartuGecko.self,property: "categoryTotal")
}
final class TartuGecko: ModelObject {
dynamic var amount = RDouble(0)
dynamic var currencyCode,debitOrCredit: String?
dynamic var exchangeRate = RDouble(0)
dynamic var categoryTotal: CategoryTotal?
}
然后您可以像这样使用 TartuGecko
访问每个 CategoryTotal
对象上的所有 categoryTotal.tartuGeckos
对象:
let realm = try! Realm()
let categories = realm.objects(CategoryTotal.self)
for category in categories{
print(category.tartuGeckos) //<-- All your TartuGeckos that point to that category are available here
}
您必须确保创建的每个 TartuGecko
对象都有对 CategoryTotal
的引用。
如果您只想要每个 amount
的总 CategoryTotal
,那么更直接的解决方案是使用这样的计算属性:
final class CategoryTotal: QueryModelObject{
dynamic var categoryId: String?
let tartuGeckos = LinkingObjects(fromType: TartuGecko.self,property: "categoryTotal")
//Computed property
var totalAmount: Double{
var total = 0.0
//There are fancier ways of calculating this,but I'm trying to be clear
for tartuGecko in tartuGecko{
total += tartuGecko.amount
}
return total
}
}
然后在每个 CategoryTotal
对象上,您始终可以使用总 amount
。
let realm = try! Realm()
let categories = realm.objects(CategoryTotal.self)
for category in categories{
print(category.totalAmount) //<-- Total amount
}