2016-11-22 6 views
3

Я использую Realm в течение нескольких дней, работая над новым приложением iOS для Swift 3, и в целом, с ним гораздо удобнее работать, чем CoreData.Как работает Realm()?

Однако, документация не представляется, достаточно детализированы, чтобы помочь мне понять, что именно ...

let realm = try! Realm() 

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

Так что если кто-либо, имеющий глубокое знание Королевства, может помочь, я был бы признателен.

Мои вопросы, в порядке важности:

  1. Что именно выше строка кода делать? Открывает ли он какой-то поток файлового менеджера, который позволит моему приложению писать и читать в/из файлов данных Realm, пока приложение остается в рабочем состоянии?

  2. Или мне нужно использовать эту строку перед каждой операцией чтения/записи Realm? Или это что-то среднее между двумя крайностями, например, нужно вызывать в каждом отдельном контроллере класса/представления, но не перед каждым действием чтения/записи?

  3. Почему Realm использует try! всеми способами? Это просто в целях упрощенной демонстрации в различных учебниках и примерах исходных файлов? Или мы на самом деле предназначены для подавления подобных ошибок при производстве Realm?

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

ответ

1

Спасибо за помощью Realm! Мы рассмотрим более четкую документацию. В настоящее время:

  1. Эта строка кода дает вам экземпляр Королевства, realm. В частности, Realm() дает вам по умолчанию Realm, который представляет собой просто Realm, чья конфигурация задана с использованием объекта конфигурации по умолчанию.(Предполагается, что если ваше приложение имеет только одно Realm, вы можете просто использовать этот API для получения ссылки на него без необходимости явно передавать конфигурационную структуру.) Вы можете вызвать API-интерфейсы в этом экземпляре, как и любой другой объект Swift , или передать его в другие API, для которых требуется аргумент Realm.
  2. Используйте экземпляр realm, как обычный объект, не беспокойтесь о потоках или любом другом скрытом состоянии. Единственное ограничение состоит в том, что вы не должны передавать Realm экземпляров между потоками или очередями.
  3. try! в нашей документации в первую очередь для краткости. Независимо от того, должно ли производственное приложение избегать использования try!, зависит от того, можно ли разумно ожидать восстановления после неудачной попытки открыть Realm и должно ли возникнуть особое поведение, если Realm не открывается. Вы можете увидеть возможные ошибки here.

Последнее замечание: существует важное различие между Realm (который является базой данных на диске), и экземпляры класса Realm в Swift. Несколько экземпляров Realm могут ссылаться на одну и ту же базовую базу данных Realm, если они были созданы с одинаковым значением конфигурации. Например, у вас может быть несколько экземпляров Realm в разных частях приложения или на разных потоках (чтобы соблюдать описанные выше требования к одному потоку). Некоторые из наших пользователей предпочитают создавать одноэлементный объект «manager», который открывает конкретное Realm при запуске, обрабатывает любые ошибки, которые могут возникнуть, и передает экземпляр Realm в код пользовательского интерфейса, который может потребоваться для чтения или записи из базы данных. Разумеется, подходит ли этот шаблон для вас, зависит от вашего стиля кодирования и конкретных потребностей вашего приложения.

Надеюсь, что это поможет!

0

База по моим сведениям, не может действительно правильно:

  1. Эта строка кода будет создавать экземпляр Realm контролировать область записи/чтения в текущем потоке, в этом случае вы звоните в Realm с по умолчанию, вы можете изменить конфигурацию, если вам нужна другая конфигурация, такая как имя базы данных, путь, ...
  2. Вам не нужно, пока вы создали его в своем текущем классе или просто используете Realm() по умолчанию, нужен он, но может просто сделать его переменной класса или что-то
  3. try означает, что он может ошибаться или что вы можете справиться, если вы хотите, используя try! означает, что вы пропустите ошибку, если вы хотите, чтобы справиться с этим, в сочетании с do и catch для обработки, если ошибка произойдет
Смежные вопросы