2010-07-22 24 views
0

我有一個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

回答

6

快速谷歌變成a framework似乎調用此方法與NSUInteger作爲參數。假設這是所討論的庫,則您錯誤地將該參數輸入爲NSNumber*。當你認爲你看到nil爲索引,你實際上只是看到索引0.

+0

是的,很好的工作查克,我複製和粘貼我從一個示例實施或核心情節使用的代碼,我沒有測試(假設它工作) – Mark 2010-07-22 03:11:32

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

編輯:順便說一句,你有你的方式結束一個分號標題

+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

2

這似乎任何事情是錯誤的API,或者你使用了錯誤的方法簽名。索引應該是一個原始類型,比如NSInteger?