iOSiOS错误&解决

iOS崩溃

2019-03-19  本文已影响25人  llt00

问题原因

解析 JSON 数据时。因为在后端数据库里面,默认数据为 null ;当我们给一个 null( NSNull 对象)发送消息的话,很大可能会直接Crash( null 是有内存的),而发送给nil的话,是不会崩溃的。

解决方法

  1. AFNetworking
    ((AFJSONResponseSerializer *)manager.responseSerializer).removesKeysWithNullValues = YES;
    经过如上设置,所有 NSNull 的值,都变成了 nil,接下来可以正常操作了。
    2.没有使用 AFN 也没关系,我们需要的只是向 NSNull 发消息不崩溃,已经有人实现了这个功能了NullSafe ,你只需要引入这个库,什么都不需要做,当你再向 NSNull 对象发消息的时候,就不会 crash 了。
    还有一种是自己封装方法:
#import "NSNull+OVNatural.h"
@implementation NSNull (OVNatural)
- (void)forwardInvocation:(NSInvocation *)invocation
{
if ([self respondsToSelector:[invocation selector]]) {
[invocation invokeWithTarget:self];
}
}
- (NSMethodSignature *)methodSignatureForSelector:(SEL)selector
{
NSMethodSignature *sig = [[NSNull class] instanceMethodSignatureForSelector:selector];
if(sig == nil) {
sig = [NSMethodSignature signatureWithObjCTypes:"@^v^c"];
}
return sig;
}
@end

关于[NSMethodSignature signatureWithObjCTypes:“@^vc”]的功能
可以参考以下两篇文章:
Objective-C Runtime Programming Guide
Type Encodings

上一篇下一篇

猜你喜欢

热点阅读