领域返回错误的数据
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了领域返回错误的数据相关的知识,希望对你有一定的参考价值。
我是新手。我有两个对象,餐厅和地址。
class Address: Object {
@objc dynamic var identifier: Int = 0
@objc dynamic var name: String!
@objc dynamic var restaurant: Restaurant!
}
请注意,地址与餐厅有关系。
class Restaurant: Object {
@objc dynamic var identifier: Int = 0
@objc dynamic var name: String!
@objc dynamic var location: String!
@objc dynamic var images: String!
}
现在在我的api方面,我将要求地址,它将返回餐厅的地址列表,但餐厅只有标识符值,其他为零,以节省加载时间。我会把它保存到我的领域。
现在,为了获得其他餐厅的详细信息,如姓名和位置等。我将再次请求api餐厅列表并将其保存到领域。
现在我有2个记录列表保存在我的数据库中。使用不完整的餐馆信息和餐馆提供完整信息。
现在我想使用Address.restaurant.identifier的标识符获取餐厅的完整信息。所以代码是这样的。
let realm = try! Realm()
let predicate = NSPredicate(format: "identifier = %i", address.restaurant.identifier)
let restaurant = realm.objects(Restaurant.self).filter(predicate).first!
我的预期输出是具有完整细节的餐厅,因为我正在过滤餐厅类,而不是我在餐厅内的餐厅内有不完整的餐厅细节。
有人可以帮我查询餐厅的完整细节吗?谢谢。
正如你所说,你提出2个请求,一个用于短地址,另一个用于餐馆详细信息,在第一个请求中你在地址和餐馆之间建立关系,但当你得到餐馆的详细信息时,你就像新的对象一样保存它。
我认为在您的情况下,您需要为要保存在DB中的每个类提供primaryKey,如:
override static func primaryKey() -> String? {
return "identifier"
}
之后,来自餐厅详细信息请求的数据将更新您在DB中具有相同ID的餐厅,并且将只有一个唯一对象。
此外,您可以有2个表,一个用于餐馆,另一个用于地址。地址将有餐馆标识符,餐厅将只有一个地址标识符。
希望它对你有所帮助
来自Realm Swift documentation for relationships:“例如,rex.owner?.address.country将遍历对象图并根据需要自动从Realm中获取每个对象。”
因此,只有在访问Restaurant
对象时,它才会获取Address
对象。因此,我不会尝试通过在Realm数据库中使用2个Restaurants
来优化提取。
你需要查询吗?
而不是做:
let realm = try! Realm()
let predicate = NSPredicate(format: "identifier = %i", address.restaurant.identifier)
let restaurant = realm.objects(Restaurant.self).filter(predicate).first!
难道你不能这样做(假设你有Address
对象):
let restaurant = address.restaurant
以上是关于领域返回错误的数据的主要内容,如果未能解决你的问题,请参考以下文章