领域服务器对象不正确的线程异常

时间:2017-01-11 02:40:00

标签: swift macos realm realm-mobile-platform

我有一个应用程序是领域对象在本地管理像这样

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 Object Server同步时,我遇到线程错误,试图将从login方法传递的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

任何可能的方法将realm实例从userLogin传递给我的类而不会导致此线程异常?如果我将我的查询放在登录功能中,这是否意味着我需要登录,每次需要从中获取内容或编辑数据库时进行同步?

1 个答案:

答案 0 :(得分:0)

在您的登录功能中,您应该存储使用登录用户创建的bool ispalindrome(int n) { int a = 0; for (int r = n; r; r /= 10) a = a*10 + r%10; return a == n; } 对象,并使用该对象根据需要创建Realm.Configuration实例,而不是尝试存储Realm宾语。 Realm个实例是特定于线程的,而配置对象则不是。