领域服务器对象不正确的线程异常
Realm Server Object Incorrect Thread Exception
我有一个应用程序是像这样在本地管理领域对象
import Foundation
import RealmSwift
class Patient: Object {
static var realm: Realm?
dynamic var name = ""
convenience init(name: String, save: Bool = false) {
self.init()
self.name = name
if save() {
self.save
}
}
func save() {
try! Patient.realm?.write {
Patient.realm?.add(self, update: true)
}
}
static func getAllPatients() -> Results<Patient>? {
return Patient.realm?.objects(Patient.self)
}
}
当我尝试将上述代码转换为与 Realm 对象服务器同步时,我在尝试将从登录方法传递的领域实例传递到我的 class
时遇到线程错误
static func userLogin(onCompletion: @escaping (Realm) -> Void) {
let serverURL = URL(string: "http://127.0.0.1:9080")!
let credentials = SyncCredentials.usernamePassword(username: "test@test", password: "test")
SyncUser.logIn(with: credentials, server: serverURL) {
user, error in
if let user = user {
let syncServerURL = URL(string: "realm://localhost:9080/~/test")!
let config = Realm.Configuration(syncConfiguration: SyncConfiguration(user: user, realmURL: syncServerURL))
let realm = try! Realm(configuration: config)
onCompletion(realm)
} else if _ = error {
}
}
}
在这里获取领域实例
userLogin() { realm in
Patient.realm = realm
}
现在,当我在 class 函数 (getAllPatients
) 中使用这个新的 Patient.realm
时,我得到 incorrect thread exception
有没有可能将领域实例从 userLogin 传递到我的 class 而不会导致此线程异常?如果我将查询放在登录功能中,是否意味着每次我需要从数据库获取内容或编辑数据库时都需要登录、同步?
在您的登录函数中,您应该存储使用登录用户创建的 Realm.Configuration
对象,并根据需要使用该对象创建 Realm
实例,而不是尝试存储 Realm
对象。 Realm
实例是特定于线程的,而配置对象不是。
我有一个应用程序是像这样在本地管理领域对象
import Foundation
import RealmSwift
class Patient: Object {
static var realm: Realm?
dynamic var name = ""
convenience init(name: String, save: Bool = false) {
self.init()
self.name = name
if save() {
self.save
}
}
func save() {
try! Patient.realm?.write {
Patient.realm?.add(self, update: true)
}
}
static func getAllPatients() -> Results<Patient>? {
return Patient.realm?.objects(Patient.self)
}
}
当我尝试将上述代码转换为与 Realm 对象服务器同步时,我在尝试将从登录方法传递的领域实例传递到我的 class
时遇到线程错误static func userLogin(onCompletion: @escaping (Realm) -> Void) {
let serverURL = URL(string: "http://127.0.0.1:9080")!
let credentials = SyncCredentials.usernamePassword(username: "test@test", password: "test")
SyncUser.logIn(with: credentials, server: serverURL) {
user, error in
if let user = user {
let syncServerURL = URL(string: "realm://localhost:9080/~/test")!
let config = Realm.Configuration(syncConfiguration: SyncConfiguration(user: user, realmURL: syncServerURL))
let realm = try! Realm(configuration: config)
onCompletion(realm)
} else if _ = error {
}
}
}
在这里获取领域实例
userLogin() { realm in
Patient.realm = realm
}
现在,当我在 class 函数 (getAllPatients
) 中使用这个新的 Patient.realm
时,我得到 incorrect thread exception
有没有可能将领域实例从 userLogin 传递到我的 class 而不会导致此线程异常?如果我将查询放在登录功能中,是否意味着每次我需要从数据库获取内容或编辑数据库时都需要登录、同步?
在您的登录函数中,您应该存储使用登录用户创建的 Realm.Configuration
对象,并根据需要使用该对象创建 Realm
实例,而不是尝试存储 Realm
对象。 Realm
实例是特定于线程的,而配置对象不是。