Как работать с NSNumber в NSNArray, созданном NSString

У меня есть какой-то метод.

 ....{
 NSString *mean = @"1:1:1:1:1:1:1:1:1";
 tab = [self moveSourceArrayToDestinationArray:mean];
....}



-(NSArray*)moveSourceArrayToDestinationArray:(NSString*)sourceArray{
NSArray *destinationArray = [sourceArray componentsSeparatedByString:@":"];

for (NSNumber *number in destinationArray) {
    sum += [number doubleValue];
}
NSLog(@"%d", [destinationArray objectAtIndex:1] * 5); // invalid operands to binary expression ('id' and 'int')
return destinationArray;
}

Как я могу сделать что-то математическую операцию над числами в NSArray?

3 ответа

Решение

Проще всего получить числовое значение из объекта NSNumber, что вы уже делали в своем фрагменте кода ранее. Например, попробуйте:

NSLog(@"%d", [[destinationArray objectAtIndex:1] intValue] * 5);

См. Полный список функций числового доступа в документации NSNumber в разделе "Доступ к числовым значениям".

Ваша ссылка на NSNumber в вашем коде является ошибкой, и вам повезло, что в вашем коде не возникло непризнанное исключение селектора. Ваш destinationArray это массив NSStrings, а не NSNumbers. Так уж получилось, что оба NSString а также NSNumber иметь doubleValue а также intValue методы. Итак, когда вы говорите, [number doubleValue] в вашем цикле, вы на самом деле в конечном итоге [NSString doubleValue] который, конечно, по-прежнему возвращает номер, который вы хотите. Однако, если вы попытаетесь позвонить [number shortValue], где shortValue это селектор, который существует только в NSNumber и не NSStringВаш код будет генерировать исключение и не работать.

Мораль этого ответа заключается в том, что вы должны удалить любую ссылку на NSNumber в своем коде или фактически преобразовать объекты в destinationArray на номера NS. В противном случае вы рискуете столкнуться с большим количеством неприятностей.

Ваш объект в [destionationArray objectAtIndex:index] скорее всего, будет и NSNumber. Поэтому вы должны [[destinationArray objectAtIndex:index] doubleValue]на данный момент тоже.

Другие вопросы по тегам