Firebase.on()侦听器导致Cordova iOS应用程序崩溃

Firebase.on()侦听器导致Cordova iOS应用程序崩溃,ios,cordova,firebase,firebase-realtime-database,Ios,Cordova,Firebase,Firebase Realtime Database,我制作了一个全新的空白Cordova应用程序(-v6.3.1),它是为iOS而构建的。该应用程序只执行以下操作: var ref = new Firebase('url-to-firebase-leaf-node-with-4000-children'); ref.on("child_added", function(child, prev) { console.log("here"); }); 部署到iPhone。应用程序崩溃,Xcode引用了以下内容: var ref = new

我制作了一个全新的空白Cordova应用程序(-v6.3.1),它是为iOS而构建的。该应用程序只执行以下操作:

var ref = new Firebase('url-to-firebase-leaf-node-with-4000-children');
ref.on("child_added", function(child, prev) {
    console.log("here");
});
部署到iPhone。应用程序崩溃,Xcode引用了以下内容:

var ref = new Firebase('url-to-firebase-leaf-node-with-4000-children');
ref.on("child_added", function(child, prev) {
    console.log("here");
});
WebThread(7):EXC_BAD_访问(code=1,address=0xbbadbeef)
bmalloc::VMHeap::grow()的内部

如果我这样做的话:

var ref=newfirebase('url-to-Firebase-leaf-node-with-100-children')则应用程序不会崩溃


这显然是一个内存问题,但如何解决呢?由于从4000个子节点中提取了1.5Mb的数据,我想不到这会耗尽所有可用内存。请避免不提取所有数据的建议-该应用程序需要所有数据,在Android上运行良好。

本机崩溃非常有表现力。应用程序内存不足

Firebase SDK使用您的订阅构建数据库的内存镜像。即使添加的
child\u
回调对子快照没有任何作用,该内部树也会为节点下的所有数据使用内存


因此,您应该考虑在订阅中使用限制,引入分页,或者甚至在数据库适合您的域模型时重新配置数据库。

本机崩溃是相当有表现力的。应用程序内存不足

Firebase SDK使用您的订阅构建数据库的内存镜像。即使添加的
child\u
回调对子快照没有任何作用,该内部树也会为节点下的所有数据使用内存



因此,您应该考虑在订阅中使用限制,引入分页,或者甚至在数据库适合域模型的情况下重新配置数据库。

< P>在添加<代码> HythyAddio> < /Case>侦听器之前,确保您已经缓存了所有数据(通过上述分页技术,或其他方式)。.

我还应该注意,我使用的是Firebase 2.4.2。还要注意的是,从Firebase检索的数据的总大小为1.5Mb。更新:我也尝试过使用WKWebView,但这也会崩溃。我还应该注意,我使用的是Firebase 2.4.2。还要注意的是,从Firebase检索的数据的总大小为1.5Mb。更新:我也尝试过使用WKWebView,但这也会崩溃。谢谢@vzsg的回答。问题是我的应用程序需要所有4000个子节点,这在Android上运行良好。我尝试对数据进行分页初始拉取,使用每个子节点50个的承诺,并对每个50个节点的页面使用
.one('value')
。这实际上只用于获取一次数据,但我需要在以后监听更改。因此,如果我在之后尝试在
上添加
,它会再次崩溃。或者没有办法允许应用程序使用更多内存?我已经在iPhone 6s上测试过了,它崩溃了,但是该设备的内存比我测试过的一些Android设备的内存要多,而且,内存异常是由于子节点的数量,还是子节点中存储的数据总量造成的?i、 e.拥有一个2mb数据的子节点是否会像4000个包含2mb数据的子节点一样崩溃?每个子节点都有开销,但我认为总数据更重要。(这只是一个观点,因为我对内部结构也没有深入了解。)如果您还没有切换,也许您可以尝试使用WKWebView而不是UIWebView?WKWebView似乎是一个更好的选择,但似乎没有任何可行的选择。CrossWalk不适用于iOS,Telerik WKWebView插件只适用于旧Cordova,Apache WKWebView引擎插件似乎不允许我连接Firebase。你知道我可以如何实现WKWebView吗?谢谢你的回答@vzsg。问题是我的应用程序需要所有4000个子节点,这在Android上运行良好。我尝试对数据进行分页初始拉取,使用每个子节点50个的承诺,并对每个50个节点的页面使用
.one('value')
。这实际上只用于获取一次数据,但我需要在以后监听更改。因此,如果我在之后尝试在
上添加
,它会再次崩溃。或者没有办法允许应用程序使用更多内存?我已经在iPhone 6s上测试过了,它崩溃了,但是该设备的内存比我测试过的一些Android设备的内存要多,而且,内存异常是由于子节点的数量,还是子节点中存储的数据总量造成的?i、 e.拥有一个2mb数据的子节点是否会像4000个包含2mb数据的子节点一样崩溃?每个子节点都有开销,但我认为总数据更重要。(这只是一个观点,因为我对内部结构也没有深入了解。)如果您还没有切换,也许您可以尝试使用WKWebView而不是UIWebView?WKWebView似乎是一个更好的选择,但似乎没有任何可行的选择。CrossWalk不适用于iOS,Telerik WKWebView插件只适用于旧Cordova,Apache WKWebView引擎插件似乎不允许我连接Firebase。您知道如何实现WKWebView吗?