的NSNumber的intValue给EXC_BAD_ACCESS

问题描述:

我有一个NSNumber传递是通过第三方API,当我打电话的intValue对指数我得到一个EXC_BAD_ACCESS错误:的NSNumber的intValue给EXC_BAD_ACCESS

-(CPFill *) barFillForBarPlot:(CPBarPlot *)barPlot recordIndex:(NSNumber *)index; 
{ 
    NSLog(@"bar index %i", index); 
    int value = [index intValue]; 
} 

我在调试器中得到的输出:

酒吧索引0

条索引1

程序接收到的信号:“EXC_BAD_ACCESS”。

这是怎么回事?

我注意到,第一次调用该方法,指数但下一次它显然不是...

我怎么能调试吗?!?!它是这样一个微不足道的东西,但我似乎无法修复它!

+1

哼,看起来对我来说是错的东西。你怎么能用NSLog记录对象(@“bar index%i”,index); [index intValue] – vodkhang 2010-07-22 02:39:33

快速谷歌变成a framework似乎调用此方法与NSUInteger作为参数。假设这是所讨论的库,则您错误地将该参数输入为NSNumber*。当你认为你看到nil为索引,你实际上只是看到索引0.

+0

是的,很好的工作查克,我复制和粘贴我从一个示例实施或核心情节使用的代码,我没有测试(假设它工作) – Mark 2010-07-22 03:11:32

尝试使用%@进行打印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]; 
} 

编辑:顺便说一句,你有你的方式结束一个分号标题

+0

%d – falconcreek 2010-07-22 02:47:52

+1

在方法体之前允许使用分号,可能允许从头进行复制和粘贴。 – Chuck 2010-07-22 03:04:00

+0

啊,不知道。 – Kurbz 2010-07-22 03:06:21

这似乎任何事情是错误的API,或者你使用了错误的方法签名。索引应该是一个原始类型,比如NSInteger?