NSNumber intValue给出了EXC_BAD_ACCESS

时间:2010-07-22 02:24:26

标签: iphone objective-c exc-bad-access nsnumber

我有一个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 ,但下次显然不是......

我该如何调试?!?!它是如此微不足道的事情,但我似乎无法解决它!

3 个答案:

答案 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];
}

编辑:顺便说一下,方法标题末尾有一个分号