У меня было приложение, в котором объекты области управлялись локально, как это
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, я получил ошибку потока при попытке передать экземпляр области, переданный из метода входа в мой класс.
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
}
Теперь, когда я использую этот новый Patient.realm
в своих функциях класса (getAllPatients
), я получаю incorrect thread exception
Любой возможный способ передать экземпляр области из userLogin в мой класс, не вызывая этого исключения потока? Если я помещаю свои запросы в функцию входа в систему, означает ли это, что мне нужно входить в систему, синхронизировать каждый раз, когда мне нужно что-то получить или отредактировать базу данных?