NSDictionaryM setObject:forKey:EXC_BAD_ACCESS崩溃

时间:2014-03-26 07:06:19

标签: ios objective-c crash-reports

崩溃日志:

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];
}

当_objects的init在代码中更早发生时:

- (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];
}

1 个答案:

答案 0 :(得分:4)

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

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