gpt4 book ai didi

ios - Realm 并不总是从云中为其主键返回一个对象,尽管它确实存在于云中

转载 作者:行者123 更新时间:2023-11-28 07:33:09 28 4
gpt4 key购买 nike

我是 Realm 的新手,现在我正面临标题中提到的问题。基本上,我的一个 RealmsUser Users中的类(这与新用户登录时创建的Realm Cloud不同) .该类有一个 userId属性,它被设置为它的主键。现在,我尝试使用以下行获取特定主键的用户:

let user = realm?.object(ofType: User.self, forPrimaryKey: "f677ca48b17bc7b90a886dd5d50148c1")

我确实看到云中有一个用户有这个主键,但他并不总是被返回。我的意思是说,如果我运行相同的代码 10 次,我只会在 10 次(大约)中获得 4 次用户。上面的代码是从一个方法运行的,该方法总是在 Controller 出现在屏幕上时调用。此外,该部分代码的方法中没有条件检查,因此它总是在调用方法时被调用。

我还检查了 realm属性,它不是 nil ,所以我不太明白为什么会这样。

当我尝试通过以下行获取当前用户时,也会发生同样的情况:

currentUser = realm?.object(ofType: User.self, forPrimaryKey: SyncUser.current?.identity)

identity值不为零(我在调用代码之前打印它)。

已更新

这里是 User看起来像:

 class User: Object {

@objc dynamic var userId: String = ""
@objc dynamic var name: String = ""

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

也许,我遗漏了什么,或者那是云端的问题/错误,我不知道。如果您遇到过这样的问题和/或知道是什么原因导致的,我将非常感谢您的帮助。提前致谢。

最佳答案

这是因为当您尝试访问不在主线程上且正在由其他线程处理的引用时可能会弹出竞争条件。

因此,当您尝试从主线程调用它时,大多数时候它都会返回 nil,因为 Realm 在您直接访问它时还没有机会写入或读取。

做什么:

确保 User 对象中的属性标记有 dynamic

properties of your Object subclasses need to be declared with the dynamic modifier to allow Realm to override the getter and setter of the property.

Without this the Swift compiler will access the object's instance variable directly, which doesn't provide any opportunity for Realm to read or write data from the Realm file.

另请阅读 this回答。

关于ios - Realm 并不总是从云中为其主键返回一个对象,尽管它确实存在于云中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54089164/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com