我是 Realm 的新手。我有两个对象,Restaurant 和 Address。
class Address: Object {
@objc dynamic var identifier: Int = 0
@objc dynamic var name: String!
@objc dynamic var restaurant: Restaurant!
}
注意 Address 与 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 端,我将请求地址,它会返回带有餐厅的地址列表,但餐厅只有一个标识符值,其他值为 nil 以节省加载时间。我会把它保存到我的 Realm 。
现在为了获取其他餐厅的详细信息,如名称和位置等。我将再次向 api 请求餐厅列表并将其保存到 realm。
现在我的数据库中保存了 2 个记录列表。 Address餐厅信息不完整,Restaurants信息完整。
现在我想使用 Address.restaurant.identifier 的标识符获取包含完整信息的Restaurant。所以代码是这样的。
let realm = try! Realm()
let predicate = NSPredicate(format: "identifier = %i", address.restaurant.identifier)
let restaurant = realm.objects(Restaurant.self).filter(predicate).first!
我的预期输出是具有完整详细信息的餐厅,因为我过滤了 Restaurant 类,但我在 Address 对象中得到了餐厅,但餐厅详细信息不完整。
谁能帮我查询餐厅的完整详情?谢谢。
最佳答案
正如您所说,您提出了 2 个请求,一个用于短地址,另一个用于餐厅详细信息,在第一个请求中,您在地址和餐厅之间建立了关系,但是当您获取餐厅详细信息时,您将其保存为新对象。
我认为在您的情况下,您需要为要保存在数据库中的每个类提供主键,例如:
override static func primaryKey() -> String? {
return "identifier"
}
之后,来自餐厅详细信息请求的数据将在数据库中使用相同的 ID 更新您的餐厅,并且只有一个唯一对象。
此外,您可以有 2 个表,一个用于餐厅,另一个用于地址。地址将具有餐厅标识符,餐厅将只有一个地址标识符。
希望对你有帮助
关于swift - 返回错误数据的 Realm ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49131112/