2017-08-17 7 views
1

ログイン画面を持つアプリケーションと、ユーザがログインした後でタブバーコントローラに2つのテーブルビューを持っています。各テーブルビュー私は私のレルムデータベースに同期したいデータを持っています。複数ページのiOSアプリケーションでRealmバックエンドにデータを同期する最も良い方法は何ですか

私のレルムデータベースのセットアップは大きく次のチュートリアルに基づいています。私は、次のコードを持つことを目指し、私tableviewsのそれぞれにおいて

SyncUser.logIn(with: userCredentials, server: (url! as URL)) { user, error in 
    guard user != nil else { 
     print("Error") 
     self.logInMessage.text = "Invalid login details, please try again" 
     self.logInMessage.shake() 
     return 
    } 
    DispatchQueue.main.async { 
     self.performSegue(withIdentifier: "logInSegue", sender: self) 
    } 
} 

以下のよう https://realm.io/docs/tutorials/realmtasks/

ユーザー認証のためのコードがあります:

DispatchQueue.main.async { 
    // Open Realm 
    let configuration = Realm.Configuration(
     syncConfiguration: SyncConfiguration(user: user, realmURL: URL(string: "realm://127.0.0.1:9080/~/realmtasks")!) 
    ) 
    self.realm = try! Realm(configuration: configuration) 
} 

ただし、設定にはユーザーが必要です。私はこれをログイン画面から渡すべきですか、それともこの過剰ですか?事前に感謝します

+0

あなたができる簡単なことは、 'currentUser'プロパティを持つ' UserManager'シングルトンを作成することです。ログイン時にユーザを取得すると、そのユーザを 'currentUser'に割り当てるだけで、' UserManager.shared.currentUser'のようなアプリケーション全体にアクセスできるようになります。 – dirtydanee

+1

それはいい考えです、私はそれを考えていませんでした。ありがとう –

+1

'Realm.Configuration.defaultConfiguration = config'でデフォルトの設定をすることができます。それで' let realm = try! 'を使うことができます。レルム() '通常。毎回SyncConfigurationを作成しなくても、シングルトンはスレッドローカル性を考慮していないので、実際には、メソッド引数として提供するRealmインスタンスから必要なものを照会することができるシングルトンが必要です。 – EpicPandaForce

答えて

1

あなたのアプリケーションが(ユーザーを認証する前に)起動したときに、あなたのRealmのデフォルト設定を設定します。これはあなたのAppDelegateまたは同様の "スタートアップ"ファイルに格納されます。

負荷が、あなたは(あなたは舞台裏発生する可能性がレルムでのiCloud認証を使用しない限り、ユーザーがログインすることができますので、これはおそらく、いくつかのUIが必要になります)、ユーザ認証の世話をすることを最初のビューで次に
let configuration = Realm.Configuration(
    syncConfiguration: SyncConfiguration(user: user, realmURL: URL(string: "realm://127.0.0.1:9080/~/realmtasks")!) 
) 

Realm.Configuration.defaultConfiguration = configuration 

ユーザーを認証したら、いつでも自分のSyncUserオブジェクトにアクセスすることができます

//Log out the user (for example) 
SyncUser.current?.logOut() 

幸運を! :)

関連する問題