在Realm Object Server中更改IP地址

时间:2016-12-28 07:32:02

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

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

连接到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的第一个应用程序,所以我在这种情况下没有多少经验。

1 个答案:

答案 0 :(得分:1)

我可能需要有关您在登录后如何处理登录的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对象,否则它将默认返回使用正常的空本地域。