我有一个NSNumber通过第三方API传递,当我在索引上调用intValue时,我得到一个EXC_BAD_ACCESS错误:
-(CPFill *) barFillForBarPlot:(CPBarPlot *)barPlot recordIndex:(NSNumber *)index;
{
NSLog(@"bar index %i", index);
int value = [index intValue];
}
我在调试器中得到的输出是:
bar index 0
bar index 1
编程接收信号:“EXC_BAD_ACCESS”。
到底发生了什么事?
我注意到第一次调用该方法时,index是 nil ,但下次显然不是......
我该如何调试?!?!它是如此微不足道的事情,但我似乎无法解决它!
答案 0 :(得分:6)
快速Google出现a framework似乎以NSUInteger
为参数调用此方法。假设这是有问题的库,您错误地将参数键入为NSNumber*
。当您认为您看到nil
索引时,您实际上只是看到了索引0。
答案 1 :(得分:2)
API似乎有问题,或者您使用了错误的方法签名。索引应该是原始类型,如NSInteger?
答案 2 :(得分:1)
尝试使用%@
打印index
,因为index
是一个对象。或者%d
与[index intValue]
。
-(CPFill *) barFillForBarPlot:(CPBarPlot *)barPlot recordIndex:(NSNumber *)index
{
NSLog(@"bar index %@", index);
//or NSLog(@"bar index %d", [index intValue]);
int value = [index intValue];
}
编辑:顺便说一下,方法标题末尾有一个分号