как работать с NSNumber в NSNArray, созданном NSString - PullRequest
0 голосов
/ 26 января 2012

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

 ....{
 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 ]

2 голосов
/ 26 января 2012

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

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

1 голос
/ 26 января 2012

Ваш объект на [destionationArray objectAtIndex:index] также может быть NSNumber.Следовательно, вам также необходимо набрать [[destinationArray objectAtIndex:index] doubleValue] на этом этапе.

1 голос
/ 26 января 2012

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

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

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

...