2017-02-04 32 views
0

Я реализовал синхронизацию в реальном времени после демонстрации приложения Realm's tasks.Уникальные объекты контейнера Realm

В этом случае используется манекен-контейнер, содержащий модели List.

Приложение для демонстрации не поддерживает автономное использование.

Я задавался вопросом, что произойдет, когда, учитывая эту настройку, я запускаю приложение в онлайн-режиме, а также автономное устройство, а затем выхожу в автономном режиме с автономным устройством.

Мое первоначальное ожидание состояло в том, что я бы закончил с двумя контейнерами (что было бы недопустимым состоянием), но когда я испытал неожиданно, в конце было только 1 контейнер.

Но иногда я получаю 2 контейнера и не смог определить причину этого.

Вопрос в том, как это точно работает? Я предполагаю, что контейнер, как правило, не дублируется, когда я впервые синхронизирую автономное устройство, так это то, что он обрабатывается как один и тот же объект, возможно потому, что у него нет первичного ключа или чего-то еще? Но почему это иногда дублируется? И какая была бы лучшая практика здесь? Возможно, мне придется использовать первичный ключ или проверить после подключения, если есть дублирование, и если да, то ручное слияние контейнеров?

ответ

1

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

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

Мы недавно сосредоточились на процессе «on-boarding», когда второе устройство подключается к учетной записи Realm Mobile Platform пользователя через новую систему уведомлений о достигнутых результатах. Более логичным подходом было бы дождаться, когда синхронизация завершит начальную загрузку после входа в систему, а затем проверит наличие объектов. Как только документация будет завершена, мы, скорее всего, будем пересматривать, как это делают Realm Tasks.

Демо-приложение (а также мобильная платформа Realm) поддерживает офлайн, но только после первого входа пользователя в систему (т.е. когда эти объекты контейнера изначально сгенерированы). По истечении этого времени приложения можно использовать в автономном режиме, и любые изменения, сделанные в этом промежутке, синхронизируются при следующем подключении.

Мы планируем создать функцию «анонимный пользователь», где пользователь может сразу начать использовать приложение (даже в автономном режиме), а затем любые изменения, которые они сделали до входа в систему (из-за их отсутствия в автономном режиме), затем переносятся на учетной записи пользователя после этого.

+0

Спасибо! По-видимому, исправление заключается в добавлении первичного ключа. Интересно, почему слияние работает большую часть времени без него. Может быть, есть внутренний идентификатор объекта, который используется аналогично первому ключу? – Ixx

 Смежные вопросы

  • Нет связанных вопросов^_^