Objective c CDVInvokedUrlCommand崩溃应用程序中的NSMUTABLEARRY

Objective c CDVInvokedUrlCommand崩溃应用程序中的NSMUTABLEARRY,objective-c,cordova,Objective C,Cordova,好的,在cordova2.1cdvinvokedurlcommand.m中有一个函数-(void)legacyArguments,它对URL有一些用途。我的问题是Cordova中的代码在变量_arguments设置为nil时调用legacyArguments,并导致应用程序崩溃。尝试检查_arguments==nil是否总是返回false(无论它是nil还是有值),并且[_argumentscount]也会使应用程序崩溃 导致应用程序崩溃的一行是 NSMutableArray* newArgum

好的,在cordova2.1cdvinvokedurlcommand.m中有一个函数-(void)legacyArguments,它对URL有一些用途。我的问题是Cordova中的代码在变量_arguments设置为nil时调用legacyArguments,并导致应用程序崩溃。尝试检查_arguments==nil是否总是返回false(无论它是nil还是有值),并且[_argumentscount]也会使应用程序崩溃

导致应用程序崩溃的一行是

NSMutableArray* newArguments = [NSMutableArray arrayWithArray:_arguments];
现在要修复它,我只需要检查以确保_参数不是零,但我找不到可靠的方法来这样做。也许有一种“安全”的方法来进行上述调用,或者有另一种方法来检查参数,如果参数为零,应用程序不会崩溃

编辑:因为它是被请求的

-[__NSCFConstantString count]: unrecognized selector sent to instance 0x8ee98
2012-09-20 11:04:59.825 EESEmployee[50307:15b03] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFConstantString count]: unrecognized selector sent to instance 0x8ee98'
*** First throw call stack:
(0xf4c012 0x262de7e 0xfd74bd 0xf3bbbc 0xf3b94e 0x1ad30 0x66dcd 0x665fe 0x669d9 0x26416b0 0x13e0035 0xecff3f 0xecf96f 0xef2734 0xef1f44 0xef1e1b 0x314a7e3 0x314a668 0xd165c 0x2ce6 0x2c15)
libc++abi.dylib: terminate called throwing an exception

任何其他出现此错误的人,在CDVInvokedUrlCommand中添加一个check将允许您继续调试,但要“修复”此问题,您需要按照说明将Cordova/Phonegap项目的插件升级到2.1


就我个人而言,如果它收到非法消息,我将离开签入并让它显示一条消息(而不是仅仅关闭整个应用程序而不提供任何信息)。

新命令与旧命令相比有什么用处?我正在从

-(void)getToken:(NSMutableArray *)arguments withDict:(NSMutableDictionary *)options
对此

-(void)getToken:(CDVinvokedUrlCommand*)command
然后设置回拨ID

self.callbackID = [arguments pop];

因为我现在没有使用参数,回调ID在哪里?

“\u arguments==nil总是返回false(无论它是nil还是有值)”-我很难相信…@MartinR:相信你想要的,一个包含{u arguments的NSLog要么返回“”,要么返回“({stuff that need})”当检查nil时,两者都将返回相同的值(!=始终为true,==始终为false)。此外,这是工作,虽然我不认为我使用的是类的正确。。。[\u arguments iskindof class:[NSMutableArray class]]&&&&u arguments.count>0如果
NSLog
显示“”,则
\u arguments
可能是一个空字符串,即
!=无
。也许我误解了你问题中的表述。
-[\uu NSCFConstantString count]:无法识别的选择器…
说,
\u参数
是字符串而不是数组,正如
arrayWithArray:
所预期的那样。插件认为他们发送的是NSArray,但他们发送到了错误的位置。我不知道legacyArguments之前从哪里获得了_参数的值,但我认为你是对的,它接收的是字符串而不是数组。我找到了这个示例,并重写了我找到的插件。我不得不改变我的标题并取出自我引用。参数现在是[command.Arguments objectAtIndex:0]