NSNumber intValue, дающий EXC_BAD_ACCESS - PullRequest
0 голосов
/ 22 июля 2010

У меня NSNumber передается через сторонний API, и когда я вызываю 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».

Какого черта происходит?

Я заметил, что при первом вызове метода индекс равен nil , но в следующий раз его явно нет ...

Как я могу отладить это?!?! Это такая банальная вещь, но я не могу это исправить!

Ответы [ 3 ]

6 голосов
/ 22 июля 2010

Быстрый Google находит фреймворк , который, кажется, вызывает этот метод с NSUInteger в качестве аргумента. Предполагая, что речь идет об этой библиотеке, вы неправильно вводите аргумент как NSNumber*. Когда вы думаете, что видите nil для индекса, вы на самом деле просто видите индекс 0.

2 голосов
/ 22 июля 2010

Казалось бы, что-то не так с API, или вы использовали неверную сигнатуру метода. Индекс должен быть примитивного типа, как NSInteger?

1 голос
/ 22 июля 2010

Попробуйте использовать %@ для печати 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];
}

Редактировать: кстати, у вас есть точка с запятой в конце вашего метода заголовок

...