【问题标题】:Changing IP address in Realm Object Server更改领域对象服务器中的 IP 地址
【发布时间】:2016-12-28 07:32:01
【问题描述】:

当领域对象服务器具有不同的 IP 时,我遇到了问题。该应用程序可以通过 Credential 登录,但之后它将返回空数据,尽管我的数据库位于该 IP 上并且可以通过 Realm Browser 访问。实际上,我只在领域对象服务器中使用一个帐户,并创建了一个包含用户名和密码的用户表,以便在它可以通过凭据连接到服务器后,我将读取屏幕上的用户名和密码并在数据库中检查它的信息。

连接Realm Object Server函数:

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()
    }
}

SyncUser登录后从表中查询:

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 的应用程序,所以我在这种情况下没有太多经验。

【问题讨论】:

    标签: ios swift mobile realm realm-object-server


    【解决方案1】:

    我可能需要更多关于您在登录后如何处理已登录 Realm 的信息,但从您那里显示的代码来看,您似乎不小心访问了 Realm 的本地版本而不是同步的一个。

    登录后,您需要确保在之后创建 Realm 实例时使用相同的 Configuration 对象。不建议在登录完成块中创建并保存 realm 实例,因为此块发生在后台线程上,使其在其他任何地方都不可用。

    如果您的应用始终在线,只需将同步配置设置为应用的默认 Realm 会更容易:

    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()
    }
    

    否则,您可以将Configuration 保存在某种全局对象中,或者在每次需要创建Realm 实例时重新创建它。要记住的重要一点是,您需要确保您的 Realm 实例使用成功登录的用户的 Configuration 对象,否则它将默认使用正常的空本地 Realm。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-17
      • 1970-01-01
      • 2018-02-06
      • 1970-01-01
      • 2012-05-15
      相关资源
      最近更新 更多