swift - 返回错误数据的 Realm

标签 swift realm

我是 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/

相关文章:

Swift 4 - 我怎样才能在类型别名的完成处理程序帮助下获得结果(字典和数据)

ios - UIWebView 不显示我的网页

ios - 检查 Realm 对象是否被删除

android-如何向 Realm 数据库添加和删除对象?

swift - Xcode 10 存档应用程序无法在安装了 Xcode 9 或更早版本的 Mac 上运行 : DYLD, [0x4] 符号丢失?

swift - FacebookCore框架AppEventBuiltin(歧义使用init)

IOS Swift Mailgun 不发送电子邮件

swift - 在 Swift 中初始化没有数据的 Realm 对象

java - android - RealmRecycle View 上的 java.lang.NoClassDefFoundError

java - 如何在 Realm 数据库中创建或实现自关系?