NSDictionaryM setObject:forKey: EXC_BAD_ACCESS crash



崩溃日志:

Crashed: com.apple.main-thread
EXC_BAD_ACCESS KERN_INVALID_ADDRESS at 0x12121212
libobjc.A.dylib - objc_msgSend - isEqual:
CoreFoundation  - -[__NSDictionaryM setObject:forKey:]

代码:

if (object) {
    [_objects setObject:object forKey:key];
}

当对象的初始化在代码的早期发生时:

- (id)init {
     self = [super init];
     if (self) {
         _objects = [[NSMutableDictionary alloc] init];
     }
     return self;
}

对象可以是零值,这就是为什么我要检查它是否存在:

AFHTTPRequestOperation *object = [[AFHTTPRequestOperation alloc] initWithRequest:request];

我不确定到底是什么原因造成的。崩溃很少发生,我无法复制,但有一些用户得到了它。我假设有什么东西被释放了,可能是_objects为零吗?或者整个控制器被解除分配?为什么我可以在日志中看到isEqual

这能解决问题吗?

if (object && _objects) {
    [_objects setObject:object forKey:key];
}

您已经为字典和对象值检查了非空条件。尝试检查对象的密钥的nil条件。可能存在密钥可以为零的情况。

if (object && _objects && key) {
    [_objects setObject:object forKey:key];
}

最新更新