首页 文章

领域返回错误的数据

提问于
浏览
0

我是新手 . 我有两个对象,餐厅和地址 .

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 具有不完整的餐馆信息和 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!

我的预期输出是餐厅的完整细节,因为我正在过滤餐厅课程,而我在餐厅里面的餐厅内有不完整的餐厅细节 .

有人可以帮我查询餐厅的完整细节吗?谢谢 .

3 回答

  • 1

    正如你所说,你提出2个请求,一个用于短地址,另一个用于餐馆详细信息,在第一个请求中,您在地址和餐厅之间 Build 关系,但是当您获得餐馆详细信息时,您将其保存为新对象 .

    我认为在您的情况下,您需要为要保存在DB中的每个类提供primaryKey,如:

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

    之后,来自餐厅详细信息请求的数据将更新您在DB中具有相同ID的餐厅,并且将只有一个唯一对象 .

    此外,您可以有2个表,一个用于餐馆,另一个用于地址 . 地址将有餐馆标识符,餐厅将只有一个地址标识符 .

    希望它对你有所帮助

  • 0

    来自Realm Swift documentation for relationships:"For example, rex.owner?.address.country will traverse the object graph and automatically fetch each object from Realm as needed."

    因此,只有在访问 Address 对象时,它才会获取 Restaurant 对象 . 因此,我不会尝试通过在Realm数据库中使用2 Restaurants 来优化提取 .

  • 0

    你需要查询吗?

    而不是做:

    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
    

相关问题