swift - Realm 对象服务器 Swift,更改 Realm 的默认权限

标签 swift realm realm-mobile-platform realm-object-server

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

我的主要问题是,在默认权限中它显示“无访问权限”。我试图授予所有用户在如下所示的 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 将您的代码分派(dispatch)回主队列:

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 是一个设计错误,并且将改变 logIn() 在我们即将推出的 Realm 3.0 中的工作方式.0 版本默认在主队列上运行回调。因此,如果您在 Realm 3.0.0 发布后升级到它,您将不再需要使用我上面详述的解决方法;您的原始代码应按原样工作。

关于swift - Realm 对象服务器 Swift,更改 Realm 的默认权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46587720/

相关文章:

ios - 当我点击 swift 3 中的提交按钮时如何重复文本字段

java - 在构建时获取 NullPointerException

javascript - 类型 'array' 的属性在 Realm 对象服务器中具有未知的对象类型

ios - SceneKit 中的背面剔除

swift - 将 PDF 转换为 CGImage 将图像转换为负片

ios - Swift 中第三方库和框架的通用实现

android - 如何将未加密的 Realm 迁移到加密 Realm

react-native - React Native 和 Realm - 架构

ios - 如何创建自定义 Realm 文件

swift - 尽管处于事务中, Realm 写入事务仍失败