在我的应用中,我需要全局访问currentUser
,它是User
类的实例,定义如下:
class User: Object{
@objc dynamic var recordName = UUID().uuidString
@objc dynamic var name = ""
@objc dynamic var email = ""
@objc dynamic var photo: Data? = nil
override static func primaryKey() -> String? {
return "recordName"
}
}
currentUser
是在应用启动时建立的,我在我的应用中几乎所有地方都经常提到它。
我注意到,有时我会收到一个错误,该错误似乎是由于在不同位置引用此currentUser
引起的:
从错误的线程访问领域
在大多数情况下,我能够跟踪Realm处于哪个线程,但是很难涵盖所有情况。所以这引出了我的问题。
是否存在将currentUser
对象设置为单例一次的安全方法?还是应该将其ID保存到磁盘,然后在每次需要时从Realm中获取对象(如下所示)?
let realm = try! Realm()
if let currentUserId = defaults.string(forKey: "currentUserId"), let user = realm.object(ofType: User.self, forPrimaryKey: currentUserId){
currentUser = user
}
我正在Xcode 10上使用Swift 4.2。谢谢!
答案 0 :(得分:2)
只要您可以确保始终从同一线程访问currentUser
对象,就可以一次将其设置为全局可访问对象,并使用对该对象的自动更新引用而不用重新访问它-每次都从Realm获取。
您可以通过在Realm / currentUser
上创建一个专用于Realm的线程并始终将其分派到该线程,或者仅从系统线程(例如DispatchQueue.main
进行此操作)来实现此目的。