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

时间:2017-05-06 04:10:38

标签: swift realm realm-mobile-platform

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

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等的每个函数我都要运行上面的代码

  1. 在每次查询之前我必须再次运行代码
  2. 是否有一种聪明的方法,只需要为整个项目连接一次或为整个ViewController连接一次?这是考虑我在不同的ViewControllers中更新和查询领域移动数据库的不同功能。

1 个答案:

答案 0 :(得分:2)

每个应用程序会话最多只需要登录一次用户就不一定了。

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

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

如果您的用户之前已登录,则可以通过SyncUser.current简单地获取用户(在应用启动之间保留)。管理员可以通过登录和从SyncUser.current获取用户来决定获取用户之间的权限,这样您的视图控制器就不必关心这些细节。

您可能想要构建的另一个可能的功能是视图控制器,如果用户已登录,则希望用户在管理器上注册以获得通知,这样他们就可以立即打开Realms并执行其他工作。