id 对象上的 isKindOfClass 导致 EXC_BAD_ACCESS

isKindOfClass on id object causes EXC_BAD_ACCESS

为什么我试图在 id 对象上使用 isKindOfClass。有时,它出错很严重,显示 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");
    }
}

这是车祸期间检查员显示的内容:

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

isKindOfClassNSObject的一个方法。当您使用 unsignedLongValue 时,它 return 是一个 unsigned longunsigned long 不是对象。

这就是你崩溃的原因。

P/S:当你写[[data objectForKey:@"someKey"] unsignedLongValue]时,它总是return一个数字。您无需检查 returned 值是否为数字。随便用。

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