2012-10-01 6 views
0

У меня есть NSArray (RSIatAddr), и я хочу проверить, является ли объект с заданным индексом = 0 (или какой-либо другой произвольной константой), но следующий код не дает мне никаких предупреждений/ошибок; но бросает исключениепроверка значений NSArray

if ([[RSIatAddr objectAtIndex:j] isEqualToNumber:nil]) { 
    [sumRSI addObject:[NSNumber numberWithInt:[[RSIatAddr objectAtIndex:j]intValue]* 
    [[sumRSI objectAtIndex:j] intValue]]]; } 

ошибка я получаю:

2012-10-02 00:42:00.266 NetSearch+DetectLocation[3741:707] 
*** Terminating app due to uncaught exception 
'NSInvalidArgumentException', reason: '-[__NSCFNumber compare:]: nil argument' 
+1

Даже если вы можете поместить большую часть кода в одну строку, может быть хорошей идеей разбить код на несколько строк, чтобы его было легче читать. Перечислите также свое исключение. – 5StringRyan

+0

Я извиняюсь за это, так жаль, что это лучше: –

ответ

1

Не видя код, который заполняет массив, его, вероятно, массив держит другого типа, чем вы ожидаете. Попробуйте установить точку останова прямо перед этой строкой кода и набрав «po [[RSIatAddr objectAtIndex: j] class]» и посмотрите, что на самом деле есть, тогда вы также можете попробовать свой isEqualToNumber в окне отладки, чтобы узнать, удастся ли это.

Я просто реализовать это в AppDelegate новой IOS App, и она работает:

NSArray *array = [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:0], [NSNumber numberWithInt:1], nil]; 
NSLog(@"%@", array); 

for (NSNumber *num in array) { 
    if ([num isEqualToNumber:[NSNumber numberWithInt:0]]) { 
     NSLog(@"Equal"); 
    } else { 
     NSLog(@"Not Equal"); 
    } 
} 
+0

Привет, я заполнил свой RSIatAddr из Plist 'NSMutableArray * RSIatAddr = [[dictionaryOfAddresses objectForKey: @" StoredAddr "] objectForKey: currentAddr]; ' Значения, которые я заполняю RSIatAddr, имеют тип, Number. Я знаю, что массив инициирован должным образом, потому что я распечатал его содержимое в окне отладчика, и это кажется прекрасным? - Здесь какой-нибудь совет? –

+0

Я не перед моим mac, чтобы попробовать это прямо сейчас, но попробуйте обернуть константу 0 в isEqualToNumber с помощью [NSNumber numberWithInt: 0] или вместо этого использовать isEqualToValue. –

+0

ДА! ... , обертывая постоянную 0 с вашей работой предложения, Еще раз спасибо! –

3

isEqualToNumber: принимает NSNumber в качестве аргумента, а не целое число, которое вы передаете.

Целое число, которое вы используете, 0, случается, значение nil, но любое целое число было бы крайне маловероятно, чтобы быть допустимым значением указателя для NSNumber, а также будет поэтому крах.

+0

все еще бросает то же исключение после вашего предложенного изменения, хотя –

+0

@TaskinulHaque, пожалуйста, отредактируйте свой ответ, чтобы включить код, который продолжает сбой, несмотря на то, что исправление прошло экземпляр NSNumber. –

+0

сделано :) - код вызывает одно и то же исключение –

Смежные вопросы