【发布时间】:2018-10-25 16:23:44
【问题描述】:
在我的应用程序中,我需要全局访问 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。谢谢!
【问题讨论】:
-
你需要在每个线程中检索它