领域SyncUser.login在Swift中不返回SyncUser.current
我正在将用户登录到全局域。为此,我正在使用realm docs中提供的SyncUser.login函数,但完成处理程序中的任何代码都不会运行,因此我的应用程序会因为SyncUser.current==nil而不断崩溃。 这是不起作用的代码:领域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")!) { (
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对象对应的所有有效登录用户标识的字典
同样,这完全是猜测——如果发现任何进一步的信息,请发表评论,我将相应地更新或删除答案。您是否在云门户中启用了匿名身份验证?