Realm Object Server Swift,更改 Realm 的默认权限



我使用管理员帐户创建了一个领域,当我查看仪表板时,我的领域就在那里。它的所有者列是空白的?正常吗?因为我用我的管理员帐户打开了那个同步的领域。

我的主要问题是,在默认权限中,它说"无访问权限"。我试图授予所有用户在下面显示的领域中编写的权限:

SyncUser.logIn(with: admin, server: serverURL) { (user, error) in
        let permission = SyncPermissionValue(realmPath: "realm://myServerIp/swipeItApp/", username: "*", accessLevel: .write)
        user?.applyPermission(permission, callback: { (error) in
            if error != nil {
                print(error?.localizedDescription)
            } else {
                print("success")
            }
        })
    }

但错误或成功都不会打印。我的代码出了什么问题?谢谢!

感谢您使用 Realm。

您没有看到回调的原因是,您直接在logIn()回调中运行 applyPermission() 方法。applyPermission() 方法必须在具有活动运行循环的线程上运行,logIn()回调在没有由后台队列管理的运行循环的线程上运行。

若要解决此问题,请使用 DispatchQueue.main.async 将代码调度回主队列:

SyncUser.logIn(with: admin, server: serverURL) { (user, error) in
    let permission = SyncPermissionValue(realmPath: "realm://myServerIp/swipeItApp/", username: "*", accessLevel: .write)
    DispatchQueue.main.async {
        user?.applyPermission(permission, callback: { (error) in
            if error != nil {
                print(error?.localizedDescription)
            } else {
                print("success")
            }
        })
    }
}

我们认为在这个用例中使用DispatchQueue.main.async是一个设计错误,并将在即将发布的 Realm 3.0.0 版本中改变logIn()工作方式,以便在缺省情况下在主队列上运行回调。因此,如果您在 Realm 3.0.0 发布后升级到它,您将不再需要使用我上面详述的解决方法;您的原始代码应按原样工作。

相关内容

  • 没有找到相关文章

最新更新