2

我的 iPhone 应用程序崩溃了,我有这个错误:

[724:95876] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull objectForKey:]: unrecognized selector sent to instance 0x1b5970878'

就这样。我不知道崩溃的确切位置。我正在进行的项目非常庞大,有什么方法可以详细了解objectForKeyon a的调用在哪里NSNull

4

2 回答 2

4

似乎您正在从 Web 服务获取数据,如果是这样的话,一些价值可能会以null. 始终尝试投射您的响应,并根据预期值进行评估

您可以在定义头文件中设置一些宏方法,或者您可以定义近接口声明

//公式形成

 #define NULLVALUE(m)                    ((m == nil || m==[NSNull null]) ? @"" : m)
 #define NULLVALUESpace(m)                    ((m == nil || m==[NSNull null]) ? @" " : m)
 #define NULLVALUEflaot(m)                  ((m == nil || m==[NSNull null]) ? 0.0f : (float)m)
 #define NULLVALUEcolor(m)                    ((m == nil || m==[NSNull null]) ? @"ffffff" : m)
 #define NULLVALUEOut(m)                    ((m == nil || [m length]==0) ? @"" : m)
 #define NULLArray(m)                    ((m == nil || m==null) ? new NSArray : m)
 #define SET_IF_NOT_NULL(TARGET, VAL) if(VAL != [NSNull null]) { TARGET = VAL; }

然后你可以在你的代码中的任何地方使用它,比如

[NSString stringWithFormat:@"%@", NULLVALUESpace([Response objectForKey:key])];
于 2018-07-10T14:18:12.663 回答
1

您是否在 XCode 中打开了“所有异常”断点?如果没有,请转到断点选项卡,然后在选项卡左下方的“+”菜单中选择Exception breakpoint。默认情况下,它应该设置为捕获所有 objc 并抛出异常。这样你的代码就会在崩溃发生的地方停止。

于 2018-07-10T14:14:29.457 回答