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");
}
}
这是车祸期间检查员显示的内容:
请帮我解决这个问题。谢谢。
isKindOfClass
是NSObject
的一个方法。当您使用 unsignedLongValue
时,它 return 是一个 unsigned long
而 unsigned long
不是对象。
这就是你崩溃的原因。
P/S:当你写[[data objectForKey:@"someKey"] unsignedLongValue]
时,它总是return一个数字。您无需检查 returned 值是否为数字。随便用。
unsigned long number = [[data objectForKey:@"someKey"] unsignedLongValue];
为什么我试图在 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");
}
}
这是车祸期间检查员显示的内容:
请帮我解决这个问题。谢谢。
isKindOfClass
是NSObject
的一个方法。当您使用 unsignedLongValue
时,它 return 是一个 unsigned long
而 unsigned long
不是对象。
这就是你崩溃的原因。
P/S:当你写[[data objectForKey:@"someKey"] unsignedLongValue]
时,它总是return一个数字。您无需检查 returned 值是否为数字。随便用。
unsigned long number = [[data objectForKey:@"someKey"] unsignedLongValue];