id对象上的isKindOfClass导致EXC_BAD_ACCESS

时间:2017-10-28 11:46:59

标签: objective-c cocoa exc-bad-access

为什么我尝试在isKindOfClass对象上使用id。有时,它出错了并显示EXC_BAD_ACCESS

以下是代码(当用户点击Growl通知时将调用):

- (void)growlNotificationWasClicked:(id)fromUserClick {
    NSDictionary *data = (NSDictionary *)fromUserClick;
    id object = [[data objectForKey:@"someKey"] unsignedLongValue];

    if([object isKindOfClass:[NSNumber class]]) {
        NSLog(@"test");
    }
}

以下是检查员在车祸中的表现:

enter image description here

请帮我解决这个问题。谢谢。

1 个答案:

答案 0 :(得分:1)

isKindOfClassNSObject的一种方法。当您使用unsignedLongValue时,它会返回unsigned longunsigned long不是对象。

这就是你崩溃的原因。

P / S:当你写[[data objectForKey:@"someKey"] unsignedLongValue]时,它总是返回一个数字。您不需要检查返回的值是否为数字。只需使用它。

unsigned long number = [[data objectForKey:@"someKey"] unsignedLongValue];