2017-02-11 13 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

いいえ、それはお勧めできません。ここでは、Configurationの2つの個別コピーを作成し、その後、サーバー上に2つの別々のRealmインスタンスを作成します。

この2つは完全に分離されているため、最初にRealmインスタンスを作成した後に構成を誤って変更して例外が発生する可能性はありません。

私たちは1つのことをお勧めしますが、そのような特定のレルム参照を保持していません。それらはスレッドセーフではなく、GCDは同じスレッドで同じキューを実行することは保証されていないので、将来の例外のために自分自身を設定しているかもしれません。

これがプライマリレルムになる場合は、通常はConfigurationをデフォルトのレルムに設定することをお勧めします。それ以外の場合、Configurationはスレッドセーフです(後で変更しないことを前提とします)。これを保持して、実際にRealmを使用する必要があるときはいつでもtry! Realm(configuruation:)に使用できます。

+0

あなたの答えをありがとう!私はこのコードで私の目標に向かって進歩しました。特定のレルム参照を保持しているのはどの部分ですか?プライマリレルムがデフォルト設定に設定しているとはどういう意味ですか?私は試してみます!ユーザが最初にログイン/サインアップするとき、またはそれらを別のレルムに切り替える必要があるときは、レルム(コンフィグレーション:)その後、私はちょうどtryを使用します! itemName.realm?.write {変更を加えるには、接続しているレルムのすべての変更について、notificationTokenを使用してアップデートを受け取ります。 self.realmをconfiguration2に設定すると、最初に接続した領域が上書きされます。 – RanLearns

+0

@RanLearns心配はいりません!これであなたの質問が解決されたら、それを受け入れられた答えとしてマークすることを忘れないでください。 :) 'realm'という名前のクラスにプロパティを追加し、手動で' self.realm = realm'を設定すると、それは私がリファレンスにぶら下がっていることです。プライマリレルムでは、毎回 'レルム(設定:) 'を使用したくない場合、' Realm.Configuration.defaultConfiguration'を 'Realm()'を呼び出したときに返されるレルムに設定することができます。 – TiM

+0

ああ大丈夫です!いいえ、上書きされません。ユーザーのアカウントには別のエントリとして存在します。 – TiM

関連する問題