[objective-c]NSDictionaryM setObject:forKey: EXC_BAD_ACCESS 崩溃

标签: ios Objective-C
发布时间: 2016/10/2 0:38:51
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

Crashlog:

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

当 init _objects 发生较早前在代码中︰

- (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:

您已签的字典和对象的值不为 null 条件。尝试检查零条件为您的密钥的对象。可能有的一例哪里键可为零。

if (object && _objects && key) {
    [_objects setObject:object forKey:key];
}
官方微信
官方QQ群
31647020