2017-02-11 12 views
1

Я пытался войти в систему или зарегистрировать пользователя и подключить их к существующей сфере. Затем, в зависимости от информации, хранящейся в этой области, мне могут понадобиться, чтобы они подключались к другому царству.Переключение между режимами (iOS/Swift 3)

Невозможно попробовать! Область с другой конфигурацией после ее первоначальной настройки? Это обескураживает? Нужно ли это делать за пределами исходного DispatchQueue?

Вот код:

SyncUser.logIn(with: usernameCredentials, server: URL(string: "http://11.22.333.0:9080")!) { 
    user, error in 
    guard let user = user else { 
     fatalError(String(describing: error)) 
    } 

    DispatchQueue.main.async { 
     let configuration = Realm.Configuration(
      syncConfiguration: SyncConfiguration(user: user, realmURL: URL(string: "realm://11.22.333.0:9080/ab56realmURL/NameOfRealm1")!) 
     ) 
     self.realm = try! Realm(configuration: configuration) 

     if (someCheckOfData in realm) { 
       let configuration2 = Realm.Configuration(
        syncConfiguration: SyncConfiguration(user: user, realmURL: URL(string: "realm://11.22.333.0:9080/ab56realmURL/NameOfRealm2")!) 
      ) 
       self.realm = try! Realm(configuration: configuration2) 
     } 
     } 
} 

спасибо за любую помощь!

ответ

2

Нет, это не обескураживает. Все, что вы делаете здесь, это создание 2 дискретных копий Configuration, которые затем будут создавать на вашем сервере 2 отдельных экземпляра Realm.

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

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

Если это будет ваше основное царство, обычно рекомендуется установить Configuration в качестве по умолчанию Realm. В противном случае, поскольку Configuration является потокобезопасным (предположим, что вы не изменяете его позже), вы можете использовать его и использовать его в try! Realm(configuruation:) всякий раз, когда вам действительно нужно использовать Realm.

+0

Спасибо за ваш ответ! Я добился успеха в своей цели с помощью этого кода. Какая часть этого держится за конкретную ссылку на Realm? Что вы подразумеваете под основной конфигурацией Realm по умолчанию? Я только пытаюсь! Царство (конфигурация :), когда пользователь сначала регистрируется/регистрируется или когда мне нужно переключать их в другое царство. После этого я просто использую try! itemName.realm? .write {, чтобы внести изменения, и я получаю обновления с уведомлениемToken для любых изменений в области, к которой они подключены. Как только я установил self.realm для конфигурации2, область, с которой я был первоначально связан, перезаписывается, правильно? – RanLearns

+0

@RanLearns Не стоит беспокоиться! Если это решит ваш вопрос, пожалуйста, не забудьте отметить его как принятый ответ. :) Когда вы добавляете свойство в свой класс под названием «realm», и вы вручную устанавливаете 'self.realm = realm', это то, что я имел в виду, навешивая ссылку. По первичному царству я имел в виду, что если вы не хотите использовать 'Realm (configuration:)' каждый раз, вы можете установить 'Realm.Configuration.defaultConfiguration' как Realm, который возвращается, когда вы вызываете' Realm() '. – TiM

+0

Ах ладно! Нет, он не будет перезаписан. Он будет существовать как отдельная запись в учетной записи пользователя. – TiM