领域SyncUser.login在Swift中不返回SyncUser.current

领域SyncUser.login在Swift中不返回SyncUser.current,swift,realm,Swift,Realm,我正在将用户登录到全局域。为此,我正在使用realm docs中提供的SyncUser.login函数,但完成处理程序中的任何代码都不会运行,因此我的应用程序会因为SyncUser.current==nil而不断崩溃。 这是不起作用的代码: SyncUser.logIn(with: .anonymous(), server: URL(string: "https://centralized-soft-chips.us1.cloud.realm.io")!) { (

我正在将用户登录到全局域。为此,我正在使用realm docs中提供的SyncUser.login函数,但完成处理程序中的任何代码都不会运行,因此我的应用程序会因为SyncUser.current==nil而不断崩溃。 这是不起作用的代码:

SyncUser.logIn(with: .anonymous(), server: URL(string: "https://centralized-soft-chips.us1.cloud.realm.io")!) {
                (user, err) in
                if let _ = user {
                    // User is logged in
                    print("SUCCESS")
                } else if let error = err {
                    print("Error")
                    fatalError(error.localizedDescription)
                }
            }
有没有人遇到过这个问题,或者他们可以重新创建它?

这完全是猜测,因为您的代码对我有效

我认为现在发生的是,您同时有两个用户经过身份验证。这在开发过程中发生在我们身上,因为他们的应用程序将崩溃,并让用户通过身份验证,然后当我们进行更改并重新运行时,我们可能会验证另一个用户,等等

当有多个身份验证用户时,调用SyncUser.current将崩溃

首先,我会像这样翻转错误检查,首先捕获任何致命的类型错误,如果发生这种情况就会返回

SyncUser.logIn(with: creds, server: Constants.AUTH_URL) { user, err in
    if let err = err {
        print(err.localizedDescription)
        return
    }
尝试一下,看看这是否会将任何错误打印到控制台

我不知道你的登录代码是从哪里调用的,但这是我们已经准备好的。如果应用程序启动,并且有多个用户通过此设备验证,我们只需将他们全部注销,然后继续登录

override func viewDidAppear() {
    super.viewDidAppear()

    let count = SyncUser.all.count
    if count > 1 {
        for userDict in SyncUser.all {
            let user = userDict.value as! SyncUser
            user.logOut()
        }
    }

    if let _ = SyncUser.current {
        print("user already logged in")
        self.finishLogin()
    } else {
        print("logging in a user")
        self.handleLoginAction()
    }
}
SyncUser.all是与SyncUser对象对应的所有有效登录用户标识的字典


同样,这完全是猜测——如果发现任何进一步的信息,请发表评论,我将相应地更新或删除答案。

您是否在云门户中启用了匿名身份验证?