Попытка использовать учебник Realm Object Server

Я создал экземпляр Amazon Web Services EC2 и развернул один из AMI с сервером объектов Realm, как объясняется в его документации: https://realm.io/docs/realm-object-server/#install-realm-object-server

После установки и создания пользователя-администратора я выполнил руководство по iOS: https://realm.io/docs/tutorials/realmtasks/, только до пункта 7, достаточно для создания задачи, но когда я добавляю новую задачу в приложение, ничего не происходит. При отладке я заметил, что следующее предложение try не выполняется:

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

Коллекция элементов, похоже, инициализирована правильно:

введите здесь описание изображения

На панели инструментов ROS можно увидеть базу данных, на которую ссылается Xcode: панельная панель области с путем синхронизации к базе данных области, на которую ссылаются

На изображении видно, что свойство «Разрешения по умолчанию» равно нет доступа, это причина того, что новая задача не создается? Если да, то как я могу изменить эти разрешения? Если это не причина, кто-нибудь может мне помочь?

заранее спасибо


person cmacera    schedule 25.01.2017    source источник


Ответы (3)


Проблема заключалась в том, что я не следовал всему руководству, потому что я не хочу использовать настольное приложение, а только мобильный пример, а объекты инициализации области в настольном приложении, поэтому у меня никогда не было действительной области, где выполняются действия.

Для быстрого и простого начала работы с этим учебным пособием по области, указывающим на онлайн-сервер, а не на локальный, вы должны инициализировать объект 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()
            }

проверка наличия списка задач с помощью if self.realm.objects(TaskList.self).count == 0 {, вы можете создать его и инициализировать область.

person cmacera    schedule 30.01.2017

Вероятно, вы забыли сначала запустить демонстрационное приложение для Mac или войти под другим пользователем. В руководстве предполагается, что существующие данные будут синхронизированы при входе в систему. Если вы никогда не запускали приложение Mac или не входили в систему под другим пользователем, может случиться так, что items не управляется Realm.

Учебник говорит следующее:

Во-первых, следуйте инструкциям по началу работы, чтобы настроить мобильную платформу Realm и запустить версию RealmTasks для macOS.

Кроме того, вы пытаетесь попробовать это руководство с ROS на AWS. В руководстве предполагается, что ROS работает на том же локальном компьютере.

Поэтому вам следует изменить код приложения Mac для подключения к AWS, а затем запустить его для синхронизации исходных данных. Затем запустите учебное приложение для iOS.

person kishikawa katsumi    schedule 27.01.2017
comment
@katsumi, вы правы, проблема заключалась в том, что не было инициализировано TaskList, потому что я не следовал инструкциям по началу работы. Но я не хочу использовать настольное приложение, только мобильное, поэтому я только что изменил функцию updatedList, чтобы создать TaskList, если он не существует. Спасибо еще раз! - person cmacera; 30.01.2017

Здесь разрешения по умолчанию показывают, могут ли все остальные пользователи получить доступ к Realm или нет, что здесь не так. У нас уже есть внутренняя проблема, связанная с разъяснением этого.

Зарегистрированный пользователь, владеющий Realm, по умолчанию имеет индивидуальные права доступа к нему. Если бы у вас не было разрешений, открытие синхронизированного Realm от клиента также не удалось бы из-за недостаточных разрешений, так что это не проблема.

Итак, вернемся к вашему коду:

try! items.realm?.write { … }

Я предполагаю, что проблема здесь в том, что коллекция еще не привязана к Realm, поэтому items.realm? оценивается как null. В этом случае транзакция записи не будет выполнена. Вы можете решить эту проблему, предварительно добавив items в Realm или выполнив запись непосредственно в синхронизированном Realm.

person marius    schedule 25.01.2017
comment
Спасибо за ответ @marius, я новичок в Swift, и я не слежу за вами ... кажется, что у предметов есть свойство realm, я обновил свой вопрос изображением. - person cmacera; 25.01.2017
comment
Из вашего вывода я могу понять, что в вашем контроллере представления есть свойство realm. Однако не похоже, что ваш список предметов поддерживается Realm. Вы можете попробовать изменить items.realm? на items.realm!, тогда это не удастся, но не молча. Однако реальный вопрос заключается в том, почему это происходит. Не могли бы вы поделиться дополнительным кодом и показать, где вы инициализируете свойство items? - person marius; 25.01.2017
comment
Если вы откроете эту ссылку: ссылка, вы увидите весь мой код (я предпочитаю не вставлять здесь), я следовал инструкциям шаг за шагом, потому что я начинаю с Swift. Возможно, учебник устарел или содержит ошибку, которую я не вижу. - person cmacera; 25.01.2017
comment
Пожалуйста, смотрите ответ Кацуми выше, руководство основано на заполнении приложения Realm from Mac исходными данными в качестве упрощения, что не работает в вашем случае. Если это все еще не должно решить проблему, вы можете проверить полный проект в учебнике, который находится выше в ветке нашего примера репозитория. - person marius; 27.01.2017