persistenceEnabled在模拟器中工作,但在设备上引发NSInternalInconsistencyException

时间:2017-01-31 20:35:53

标签: ios swift firebase swift3 firebase-realtime-database

我已将persistenceEnable设置为true,从而在我的应用中启用了Firebase的磁盘持久性

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    FIRApp.configure()
    FIRDatabase.database().persistenceEnabled = true
    return true
}

当我在xcode的iPhone模拟器中运行应用程序时,一切都按预期工作,但当我在设备上运行应用程序时,我得到一个NSInternalInconsistencyException。

*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Unrecognized database version: '

*** First throw call stack:

(0x18e68d1b8 0x18d0c455c 0x18e68d100 0x10014323c 0x100143124 0x100154434 0x100de9258 0x100de9218 0x100df6aec 0x100decce0 0x100df7088 0x100df8e2c 0x100df8b78 0x18d71f2a0 0x18d71ed8c)

libc++abi.dylib: terminating with uncaught exception of type NSException

我真的不知道发生了什么。当附加'观察'时,看起来像抛出异常。听众

 let ref = FIRDatabase.database().reference()
 ref.child("usersEvents").child(userID!).observe(.value, with: { (snapshot) in
...

如果我评论persistenceEnabled = true

 func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    FIRApp.configure()
    //FIRDatabase.database().persistenceEnabled = true
    return true
}

该应用程序适用于我的设备,但当然我放弃了离线功能。

我还尝试移动FIRDatabase.database().persistenceEnabled = true,但每次使用时,应用程序在iPhone上执行时都会崩溃。

谢谢和问候。

1 个答案:

答案 0 :(得分:1)

<强> TLDR; 我从我的设备中删除该应用程序,让xCode安装它的新副本,这解决了这个问题。

完整评论: 在一些尝试在其他项目中重现该问题几个小时没有成功之后,我找到了解决方案。

错误消息不是100%清除,但提供了一个很好的线索Unrecognized database version:

由于当persistenceEnabled设置为true时应用程序仅在我的设备上崩溃,我发现该问题必须与本地数据库缓存有关。

我从我的设备中删除该应用,让xCode安装它的新副本,这解决了这个问题。

不知何故,本地Firebase缓存必定已损坏,每次Firebase的sdk尝试访问它时,我的应用程序崩溃了。

我希望这可能会帮助某些人在某些日子里遇到同样的问题。