Как создать NSMutableArray значений с плавающей точкой - PullRequest
30 голосов
/ 30 января 2009

Я новичок в разработке Objective-C и iPhone, и я пытаюсь сохранить значения с плавающей точкой в ​​NSMutableArray, но когда я это получаю, я получаю сообщение об ошибке «несовместимый тип для аргумента 1 в« addObject ». Что я делаю неправильно? Я пытаюсь создать массив парных чисел, с которыми я могу выполнять математические вычисления.

Ответы [ 4 ]

62 голосов
/ 30 января 2009

NSMutableArray содержит только объекты, поэтому вы хотите, чтобы массив загружался объектами NSNumber. Создайте каждый NSNumber для хранения вашего двойника, а затем добавьте его в свой массив. Возможно, как-то так.

NSMutableArray *array = [[NSMutableArray alloc] init];
NSNumber *num = [NSNumber numberWithFloat:10.0f];
[array addObject:num];

Повторите при необходимости.

12 голосов
/ 30 января 2009

Используйте NSNumber для переноса числа, потому что словарю нужен объект:

[myDictionary setObject:[NSNumber numberWithFloat:0.2f] forKey:@"theFloat"];
/* or */
[myDictionary setObject:@0.2f forKey:@"theFloat"];

получить его, отправив floatValue:

float theFloat = [[myDictionary objectForKey:@"theFloat"] floatValue];

Код не проверен.

Вы также можете обернуть многие другие типы данных в NSNumber, см. Документацию . Также есть NSValue для некоторых структур, таких как NSPoint и NSRect.

7 голосов
/ 30 января 2009

В Какао NSMutableDictionary (и все коллекции, действительно) требуют объекты в качестве значений, поэтому вы не можете просто передать любой другой тип данных. Как предложили и sjmulder, и Райан, вы можете переносить свои скалярные значения в экземплярах NSNumber (для числа) и NSValue для других объектов.

Если вы представляете десятичное число для чего-то вроде цены, я бы посоветовал также посмотреть и использовать NSDecimalNumber . Затем вы можете избежать проблем с неточностью с плавающей запятой, и вы можете использовать и хранить «значение» как NSDecimalNumber вместо представления его с помощью простого кода

Например:

// somewhere
NSDecimalNumber* price = [[NSDecimalNumber decimalNumberWithString:@"3.50"] retain];
NSMutableArray*  prices= [[NSMutableArray array] retain];

// ...

[prices addObject:price];
1 голос
/ 22 мая 2014
NSMutableArray *muArray = [[NSMutableArray alloc] init];
NSNumber *float = [NSNumber numberWithFloat:210.0f];
NSNumber *float1 = [NSNumber numberWithFloat:211.0f];
[muArray addObject:float];
[muArray addObject:float1];

NSlog(@"my array is--%@",muArray);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...