iOS Cordova 应用程序在恢复时崩溃

Posted

技术标签:

【中文标题】iOS Cordova 应用程序在恢复时崩溃【英文标题】:iOS Cordova app crashes on Resume 【发布时间】:2014-08-29 18:00:13 【问题描述】:

我正在构建一个带有 Magtek uDynamo 读卡器插件的 Cordova 应用程序。当我恢复时它崩溃了。

如果我从不调用读卡器(或从不暂停/恢复),该应用程序可以正常工作。

我使用了 Zombie Profiler,这是错误消息 - 一条 Objective-C 消息被发送到地址为:0x17522260 的已释放“MTSCRA”对象(僵尸)。

我检查了我是否正在使用 ARC,并将日志记录语句全部放在我的本机插件代码中,以确保 MTSCRA 对象永远不会为 NULL。故障转储没有给出任何回溯,异常断点落在机器码中。

我还是 ios/Cordova 的新手,所以如果我可以使用任何其他调试工具或者我是否应该发布一些代码来帮助诊断问题,请告诉我。

编辑:添加附加信息以响应下面的 cmets

这是流程- 1.运行读卡器页面 2. 无读卡器打开页面(读卡器已断开连接) 3.暂停,继续 4. 完成没有读卡器的页面工作 5.用读卡器重定向到页面(读卡器应该连接) 6. 崩溃

【问题讨论】:

我会试着猜测一下。你提到了step 5.Redirected to page with card reader。您是自己创建的插件还是第三方插件?页面是两个不同的页面还是它们是单页应用程序。我的意思是重定向页面是一个带有读卡器脚本的单独 html 页面。如果是,那么根据我有限的知识,重定向页面中包含的脚本将不起作用。这与 Phonegap 无关,而是与 Web App 相关。你可以做的是创建一个读卡器的模型,比如一个虚拟读卡器来测试应用程序和插件。 我怀疑您的读卡器在重新进入时出现问题(例如,进入其页面)。确保该页面上的对象在重新访问之前已被销毁(假设它实例化每个页面加载),或者在继续重新进入之前添加一个检查以查看对象是否已经实例化。 【参考方案1】:

我从未使用过 Cordova,但在您尝试使用它之前,我会检查该对象是否为 nil。当您的应用程序进入后台时,您应该断开与读卡器的连接并重新连接。

【讨论】:

我在使用之前添加了日志来检查对象是否为 nil。在崩溃之前,我的插件代码中从来没有为零。即使我在没有读卡器的情况下从页面暂停/恢复,它也会崩溃。流程如下 - 1. 运行读卡器页面 2. 打开没有读卡器的页面(读卡器已断开连接) 3. 暂停,继续 4. 完成没有读卡器的页面 5. 重定向到有读卡器的页面(读卡器应该连接)6.崩溃

以上是关于iOS Cordova 应用程序在恢复时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

Sencha touch/cordova 应用程序在 ios8 启动时随机崩溃

Cordova iOS onResume 在启动和崩溃应用程序时触发

加载产品详细信息时,Cordova iOS In App Purchase 崩溃

Ionic2:iOS 应用程序在使用cordova-plugin-media 录制音频并再次播放时崩溃

iOS8 phonegap cordova 网络信息应用程序崩溃

以远程服务器为目标时,Cordova iOS 崩溃