目前我正在使用领域网页中的此代码连接到领域移动服务器。
func setupRealm() {
// Log in existing user with username and password
let username = "admin" // <--- Update this
let password = "admin" // <--- Update this
SyncUser.logIn(with: .usernamePassword(username: username, password: password, register: false), server: URL(string: "http://127.0.0.1:9080")!) { user, error in
guard let user = user else {
fatalError(String(describing: error))
}
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)
}
}
}
在我的代码中何时何地必须使用此连接。我目前的观察是:
1,在viewController中viewDidLoad,viewWillAppear等的每个函数我都要运行上面的代码
是否有一种聪明的方法,只需要为整个项目连接一次或为整个ViewController连接一次?这是考虑我在不同的ViewControllers中更新和查询领域移动数据库的不同功能。
答案 0 :(得分:2)
每个应用程序会话最多只需要登录一次用户就不一定了。
我建议您创建一个管理器类,可能是一个单例或者您可以在整个应用程序中传递的实例,用于处理获取和保留用户对象。可以在应用程序启动时实例化此管理器。
如果您的用户以前还没有登录过,或者之前已经注销,那么一旦他们输入了他们的凭据,您就可以进行SyncUser.logIn()
调用以获取用户。拥有该用户后,您可以将其存储在管理器中。然后,您的视图控制器可以向该管理器询问用户对象,以便他们可以使用它来打开他们的领域。
如果您的用户之前已登录,则可以通过SyncUser.current
简单地获取用户(在应用启动之间保留)。管理员可以通过登录和从SyncUser.current
获取用户来决定获取用户之间的权限,这样您的视图控制器就不必关心这些细节。
您可能想要构建的另一个可能的功能是视图控制器,如果用户已登录,则希望用户在管理器上注册以获得通知,这样他们就可以立即打开Realms并执行其他工作。