isKindOfClass on id object cause EXC_BAD_ACCESS

isKindOfClass on id object cause EXC_BAD_ACCESS

问题描述:

为什么我试图在id对象上使用isKindOfClass。有时,它出了问题严重,并显示EXC_BAD_ACCESSisKindOfClass on id object cause EXC_BAD_ACCESS

下面是代码(当用户在低吼通知点击将被调用):

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

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

+0

'object'可能已被释放,或者它根本不是一个有效的引用。你有僵尸吗? – Sulthan

+0

有什么方法可以检测或避免它? – user2131907

+0

对象来自哪里以及如何存储它? – Willeke

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

这就是为什么你会崩溃。

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

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

+0

问题中的代码是'unsignedLongValue'。什么是正确的代码? – Willeke

+0

再次检查。我已经更新了答案。 – trungduc

+0

@Willeke告诉我,如果你可以解决它:) – trungduc