Synced Realm在启动时未加载

时间:2016-10-19 03:12:39

标签: ios database swift realm

我试图在我的ios应用中使用Realm Object Server。我在AWS上托管它,我可以成功地读取和写入它。但是,我在启动应用程序后访问同步域时遇到问题。在启动时,我有一个登录视图控制器(非常类似于示例应用程序中提供的控制器)

成功验证后,我想访问同步的Realm来决定要呈现哪个视图控制器。

@IBAction func logIn(sender: AnyObject?) {
    guard userInputValid() else {
        return
    }
    self.activityIndicator.startAnimating()
    self.logInButton.isHidden = true
    SyncUser.authenticate(with: Credential.usernamePassword(username: userNameTextField.text!, password: passwordTextField.text!, actions: []), server: syncAuthURL!, onCompletion: { user, error in
        guard let user = user else {
            self.presentError(error: error as! NSError)
            self.activityIndicator.stopAnimating()
            self.logInButton.isHidden = false
            return
        }

        Realm.Configuration.defaultConfiguration = Realm.Configuration(
            syncConfiguration: (user, self.syncServerURL!),
            objectTypes: [Dot.self, Mod.self]
        )

        let realm = try! Realm()
        // realm.objects(Dot.self).count == 0 here even though there is a Dot object persisted in the server
        // When I access the realm later in the app (e.g in a viewDidAppear of another controller) the object is there
        let appDelegate = UIApplication.shared.delegate as! AppDelegate
        let vc = DotCollectionViewController(nibName: "DotCollectionViewController", bundle: nil)
        let navVC = UINavigationController(rootViewController: vc)
        appDelegate.window?.rootViewController = navVC
    })
}

我已经验证了对已同步的Realm的读取和写入,并发现了一些特殊的东西:即使我能够成功写入数据,该领域似乎也有一个nullUR的fileURL。我使用let realm = try! Realm()在我的应用的其他部分访问领域,当我print(realm.configuration.fileURL)时,即使对于有效的同步领域,我也总是为零。

所以我的问题是,我是否需要等待一段时间才能访问同步的Realm?如果是这样,我该怎么做呢?对此问题的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

预计已同步的Realm配置的fileURLnil,因为文件位置是我的Realm管理的,用户(您)无法访问。< / p>

首次在设备上打开已同步的Realm时,只要SyncUser回调提供有效的SyncUser.authenticate(...),就可以访问该域。但是,它的内容将以异步方式填充,这就是为什么realm.objects(Dot.self)在立即打开Realm时为空,但稍后从服务器获取对象的原因。

如果在继续部分应用之前等待数据可用非常重要,那么Realm正在努力在不久的将来采用这两种方式: