Cordova iOS 3.6.3+ 问题 - [__NSArrayI 长度]:无法识别的选择器

Posted

技术标签:

【中文标题】Cordova iOS 3.6.3+ 问题 - [__NSArrayI 长度]:无法识别的选择器【英文标题】:Cordova iOS 3.6.3+ Issue - [__NSArrayI length]: unrecognized selector 【发布时间】:2014-12-04 11:08:15 【问题描述】:

我在 Xcode 控制台中收到以下错误:

-[__NSArrayI length]: unrecognized selector sent to instance 0x174236680
*** WebKit discarded an uncaught exception in the webView:decidePolicyForNavigationAction:request:frame:decisionListener: delegate: <NSInvalidArgumentException> -[__NSArrayI length]: unrecognized selector sent to instance 0x174236680    

这会导致 webView 停止响应任何触摸事件,尽管应用程序仍然正常工作。例如,我可以成功地从 Safari Web 检查器控制台调用一个函数。 有什么想法吗?

【问题讨论】:

你知道是什么原因造成的吗? 不知道,它发生在屏幕更改时,触发了几个 ajax 调用,并且 navigator.notification.confirm() 将在其中一个回调中触发,但没有警报弹出。但我什至可以从网络检查器控制台成功调用它。 什么部分?它太大了,不能在这里全部发布。它与以前的科尔多瓦版本配合得很好。我想这是科尔多瓦的问题,而不是我的 javascript。 Web 检查器中没有错误。 android在启动时完全崩溃。 BB10 工作正常,只是没有弹出警报。即使我从控制台调用它。 【参考方案1】:

好的,我找到了问题。我的错。

navigator.notification.confirm() 的参数计数错误。

给cordova开发者的小提示:使用JSON对象作为函数的参数,那么就不需要null等参数了(因为多个参数的顺序和位置正确)。

【讨论】:

【参考方案2】:

我在 iPhone 的应用程序中遇到了同样的错误。我正在将一个应用程序从 BlackBerry 10 移植到 ios。顺便说一下,我们更新了 cordova 版本。

cordova 4.0.0 中的 cordova API 在 iOS 上发生了变化或不同。

在 BB10 应用程序中,此代码有效:

navigator.notification.alert("Test", function() , ["Info"]);

在 iOS 上必须删除数组:

navigator.notification.alert("Test", function() , "Info");

【讨论】:

以上是关于Cordova iOS 3.6.3+ 问题 - [__NSArrayI 长度]:无法识别的选择器的主要内容,如果未能解决你的问题,请参考以下文章

Cordova IOS 8 选择元素

无法执行dex:多个dex文件定义了Lorg/apache/cordova/App$1

在 Android 4.4+ 上运行时如何忽略 Cordova App 的字体大小设置更改?

使用 cordova-ios 5 更新 Cordova 9

Cordova 平台 ios 错误

Cordova 构建 ios 但不会运行