2016-12-28 7 views
0

レルムオブジェクトサーバのIPが異なると問題が発生します。アプリケーションはCredentialを使用してログインできますが、それ以降はデータベースがそのIP上に座っていても空のデータが返され、Realm Browserからアクセスできます。実際には、私はrealmオブジェクトサーバーで1つのアカウントしか使用せず、ユーザー名とパスワードを使用してユーザーテーブルを作成し、Credentialをサーバーに接続した後、ユーザー名とパスワードを画面上で読み取り、データベース内の情報を確認します。レルムオブジェクト・サーバ機能へレルムオブジェクトサーバのIPアドレスを変更する

接続:SyncUserすることにより、ログイン後のテーブルから

class func login(username: String, password: String, action: AuthenticationActions, completionHandler: @escaping()->()) { 
    let serverURL = NSURL(string: realmIP)! 
    let credential = Credential.usernamePassword(username: username, password: password, actions: [action]) 
    SyncUser.authenticate(with: credential, server: serverURL as URL) { user, error in 
     if let user = user { 
      syncUser = user 
      let syncServerURL = URL(string: realmURL)! 
      let config = Realm.Configuration(syncConfiguration: (user, syncServerURL)) 
      realm = try! Realm(configuration: config) 
     } else if error != nil { 

     } 
     completionHandler() 
    } 
} 

問合せ:

class func loginLocal(employee: String) -> Bool{ 
    let predicate = NSPredicate(format: "employee = %@", employee) 
    if (realm != nil) { 
     let user = realm?.objects(MyUser.self).filter(predicate) 
     if ((user?.count)! > 0) { 
      return true 
     } 
    } 
    return false 
} 

ソリューションは、私がして、関数を複数回呼び出す必要がありますように奇妙なように思わ私のログインボタンを押して、それがサーバーに行くことを願っています。

これはRealmとRealm Object Serverを使用した私の最初のアプリケーションであり、このような状況ではあまり経験がありません。

答えて

1

ログイン後にどのようにログインしたレルムを処理するかについての詳細が必要な場合がありますが、そこに表示されているコードからは、誤ってレルムのローカルバージョンにアクセスしています同期されたもの。

一度ログインすると、そのあとにRealmのインスタンスを作成するたびに同じConfigurationオブジェクトを使用する必要があります。このブロックはバックグラウンドスレッドで発生し、他の場所では使用できないようにするため、ログイン完了ブロック内にrealmインスタンスを作成して保存することはお勧めしません。あなたのアプリが常にオンラインである場合

が、それは単にあなたのアプリケーションのデフォルト・レルムとして同期設定を設定する方が簡単です:あなたはグローバルオブジェクトのいくつかの並べ替えにConfigurationを保存するか、そうでない場合

SyncUser.authenticate(with: credential, server: serverURL as URL) { user, error in 
    if let user = user { 
     syncUser = user 
     let syncServerURL = URL(string: realmURL)! 
     let config = Realm.Configuration(syncConfiguration: (user, syncServerURL)) 
     Realm.Configuration.defaultConfiguration = config 
    } 
    completionHandler() 
} 

Realmインスタンスを作成する必要があるたびにそれを再作成します。重要なことは、Realmインスタンスが正常にログインしたユーザーとConfigurationオブジェクトを使用していることを確認する必要があることです。そうでない場合は、通常の空のローカルレルムを使用してデフォルトに戻ります。

関連する問題