2020-09-23 15:23:07.585876+0800 ThemeDemo[12040:281421] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[NSNull floatValue]: unrecognized selector sent to instance 0x7fff8062db10'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff23e3de6e __exceptionPreprocess + 350
1 libobjc.A.dylib 0x00007fff512a19b2 objc_exception_throw + 48
2 CoreFoundation 0x00007fff23e5eb94 -[NSObject(NSObject) doesNotRecognizeSelector:] + 132
造成这种情况的例子:
假如有这么一个json
{
"key1":"1",
"key2":2,
"key3":null
}
这个json在转换成字典之后会变成
{
key1 = 1;
key2 = 2;
key3 = "<null>";
}
![](https://img.haomeiwen.com/i2659596/86328e2421072b51.png)
对于此时的这个字典我们使用objectForKey
这个方法取key3得到的是一个NSNull的对象
![](https://img.haomeiwen.com/i2659596/323ff797edfb2f58.png)
此时我们再继续使用这个取值去调用方法就会崩溃,因为NSNull是没有这个方法的。
常规情况我们都会用JSONModel YYModel或者MJExtension来转成对象来使用,而这些库都会内部处理不会让我们拿到这个NSNull的对象,所以还是建议尽量不要使用objectForKey
去取json转data再转dic的值。
(其实如果取出来的真要是个nil倒还可以不会崩溃,nil 可以调用任何方法,注意这个方法是不会执行的。)
网友评论