【问题标题】:Different Realm Configurations Appearing in Swift AppSwift App 中出现的不同领域配置
【发布时间】:2016-10-07 23:50:35
【问题描述】:

Swift 3、Xcode 8、RealmSwift 2.0.2、Realm 对象服务器 1.0

在我的应用委托中,我有一个函数可以将我的 Realm 配置设置为连接到我设置的远程同步服务器。我只是使用一个测试帐户进行身份验证,直到我可以使用同步的基础知识。 1.1.1.1 不是我的真实 IP 地址。 ;)

let username = "test"
let password = "test"

let address = "http://1.1.1.1:9080"
let syncAddress = "realm://1.1.1.1:9080/~/myapp"

SyncUser.authenticate(with: Credential.usernamePassword(username: username, password: password, actions: []), server: URL(string: address)!, onCompletion: { user, error in
    guard let user = user else {
      fatalError(String(describing: error))
    }

    // Open Realm
    Realm.Configuration.defaultConfiguration = Realm.Configuration(
      syncConfiguration: (user, URL(string: syncAddress)!)
    )
 })

这似乎工作正常。我看到数据出现在我的服务器上,我没有收到任何错误。 我的假设是,在这里设置 Realm 配置意味着Realm() 的所有实例都将使用此配置。

然后我将realm 对象设置为两个单独的视图控制器中的类属性:

class TableViewControllerA: UITableViewController{
  let realm = try! Realm()
  override func viewDidLoad() {
    // CORRECT: Prints "nil" as it should for a remotely synced Realm instance
    print(realm.configuration.fileURL)
  }
}

...和另一个文件中的另一个:

class ViewControllerB: UIViewController{
  let realm = try! Realm()
  override func viewDidLoad() {
    // WRONG: Prints the path to the local realm file in the Simulator
    print(realm.configuration.fileURL) 
  }
}

如上面代码 cmets 中所述,realm 的两个实例是不同的。在我的一些视图控制器上,我可以将对象保存到服务器并查看它们出现在我的设备上。在其他视图控制器上,我看不到任何数据,因为它使用了错误的 Realm 数据库。

我不能可靠地期望 Realm 配置在我的应用程序中持续存在吗?我需要做其他事情才能使用相同的配置吗?

【问题讨论】:

  • 在设置默认配置之前仔细检查您的视图控制器是否没有被实例化。
  • 我在我的 App Delegate 中设置默认配置。我不能保证这会首先发生吗?
  • 您发布的代码显示您在用户通过身份验证后异步调用的回调中设置默认配置。
  • 啊,不错的收获——比赛条件!但我认为配置必须在那个异步函数中,因为我需要 user 来设置配置。
  • @bdash 如果您想发布关于异步函数的回复作为答案,我会将其标记为已接受。这就是问题所在。非常感谢!

标签: ios swift realm realm-mobile-platform


【解决方案1】:

您正在身份验证完成处理程序中设置默认配置。此回调在用户通过身份验证后异步调用。如果您的视图控制器子类之一的实例恰好在回调运行之前创建,则它打开的领域将在您对身份验证完成处理程序进行任何更改之前使用 default 默认配置。

【讨论】:

  • 如何最好地避免这种情况?
  • 我通过使用用户身份验证屏幕阻止我的 UI 的其余部分来避免它。用户登录后,我以编程方式加载不同的故事板。
  • 很有趣——正是我所做的——想知道是否有人使用信号量或使用其他技术来等待完成处理程序完成。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多