isKindOfClass on id object cause EXC_BAD_ACCESS
问题描述:
为什么我试图在id
对象上使用isKindOfClass
。有时,它出了问题严重,并显示EXC_BAD_ACCESS
isKindOfClass 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");
}
}
,这里是在崩溃期间所检查显示:
请帮我解决这个问题。谢谢。
答
isKindOfClass
是NSObject
的方法。当您使用unsignedLongValue
时,它将返回一个unsigned long
而unsigned long
不是一个对象。
这就是为什么你会崩溃。
P/S:当你写[[data objectForKey:@"someKey"] unsignedLongValue]
时,它总是返回一个数字。您不需要检查返回的值是否为数字。只要使用它。
unsigned long number = [[data objectForKey:@"someKey"] unsignedLongValue];
'object'可能已被释放,或者它根本不是一个有效的引用。你有僵尸吗? – Sulthan
有什么方法可以检测或避免它? – user2131907
对象来自哪里以及如何存储它? – Willeke