关于控制器、函数和查询,我什么时候必须在 swift 代码中连接到领域对象服务器

When do I have to connect to realm object server in my swift code with regards to controllers, functions and queries

目前我正在使用领域网页中的这段代码连接到领域移动服务器。

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,在viewDidLoad、viewWillAppear等的每个函数中ViewController我都必须运行上面的代码

  1. 在每次查询之前,我必须再次 运行 代码

有没有一种聪明的方法只需要为整个项目连接一次或为整个 ViewController 连接一次?这是考虑到我在不同的 ViewControllers 中在不同的函数中更新和查询 realm mobile 数据库。

您最多不必在每个应用程序会话中多次登录用户。

我建议您创建一个管理器 class,也许是单例或您可以在整个应用程序中传递的实例,用于处理获取和保留用户对象。该管理器可以在您的应用程序启动时实例化。

如果您的用户以前从未登录过,或者之前已经注销过,一旦他们输入了他们的凭据,您就可以进行 SyncUser.logIn() 调用以获取用户。拥有用户后,您可以将其存储在管理器中。然后,您的视图控制器可以向该管理器询问用户对象,以便他们可以使用它来打开他们的领域。

如果您的用户之前登录过,您可以通过 SyncUser.current 简单地获取用户(在应用程序启动之间保持不变)。管理器可以决定是通过登录获取用户还是从 SyncUser.current 获取用户,因此您的视图控制器不需要关心这些细节。

您可能想要构建的另一个可能的功能是让视图控制器希望用户在管理器上注册,以便在用户登录时收到通知,这样他们就可以立即打开领域并执行其他工作。