尝试使用Realm对象服务器教程

时间:2017-01-25 08:11:26

标签: ios swift amazon-ec2 realm realm-object-server

我创建了一个Amazon Web Services EC2实例,并使用Realm Object Server部署其中一个AMI,其文档说明如下: https://realm.io/docs/realm-object-server/#install-realm-object-server

安装并创建了我的管理员用户后,我已经完成了iOS教程:https://realm.io/docs/tutorials/realmtasks/,直到第7点,足以创建任务,但是当我在应用程序中添加新任务时,没有任何反应。调试,我注意到下一句尝试,没有执行:

let items = self.items
try! items.realm?.write {
                items.insert(Task(value: ["text": text]), at: items.filter("completed = false").count)
            }

项目集合似乎已正确初始化:

enter image description here

在ROS仪表板中,可以看到Xcode中引用的数据库: realm dashboard with sync path to referenced realm data base

在图片中可以看到“默认权限”属性是无法访问,这是不创建新任务的原因吗?如果是这样,我该如何更改权限?如果那不是原因,任何人都可以帮助我吗?

提前致谢

3 个答案:

答案 0 :(得分:4)

问题是我没有遵循完整的教程,因为我不想使用桌面应用程序,只是移动示例,而是桌面应用程序中的realm init对象,所以我从来没有一个有效的领域执行操作。

为了快速简单地开始使用指向在线服务器而不是本地服务器的这个领域教程,您必须初始化TaskList对象并在安装时将其添加到self.realm

            // Show initial tasks
            func updateList() {
                if self.realm.objects(TaskList.self).count == 0 {

                    let list = TaskList()
                    list.id = "000001"
                    list.text = "lista de prueba"

                    // Add to the Realm inside a transaction
                    try! self.realm.write {
                        self.realm.add(list)
                    }

                }
                if self.items.realm == nil, let list = self.realm.objects(TaskList.self).first {
                    self.items = list.items
                }
                self.tableView.reloadData()
            }

检查是否没有带有的TaskList,如果self.realm.objects(TaskList.self).count == 0 {,则可以创建一个和init域。

答案 1 :(得分:3)

您可能忘记首先启动Mac演示应用或使用其他用户登录。本教程假定现有数据将在登录时同步。如果您从未启动Mac应用程序或登录其他用户,则可能会发生items不由Realm管理。

教程说明如下:

  

首先,请按照“使用入门”说明设置Realm Mobile Platform并启动RealmTasks的macOS版本。

此外,您尝试在 AWS 上使用ROS尝试本教程。本教程假设在同一台本地计算机上运行ROS。

因此,您应修改Mac应用程序代码以连接到AWS,然后运行它以同步初始数据。然后运行教程iOS应用程序。

答案 2 :(得分:0)

这里的默认权限显示所有其他用户是否可以访问Realm,这不是这里的情况。我们已经有一个内部问题就是澄清这一点。

拥有Realm的注册用户默认拥有该权限。如果您没有权限从客户端打开同步Realm也会因权限不足而失败,所以这不是问题所在。

回到你的代码:

try! items.realm?.write { … }

我的猜测是这里的问题是该集合尚未附加到Realm,因此items.realm?评估为null。在这种情况下,写入事务将不会被执行。 您可以通过确保首先将items添加到Realm或直接在同步的Realm上执行写入来解决此问题。