Pergunta

Eu sou novo para Objective C e iPhone desenvolvimento, e eu estou tentando armazenar valores de ponto flutuante em um NSMutableArray, mas quando eu faço, eu recebo um erro dizendo "tipo incompatível para o argumento 1 de 'addObject". O que estou fazendo de errado? Eu estou tentando criar uma matriz de duplas que eu possa realizar cálculos matemáticos com.

Foi útil?

Solução

NSMutableArray apenas detém objetos, então você quer um array para ser carregado com objetos NSNumber. Criar cada NSNumber para realizar o seu duplo, em seguida, adicioná-lo à sua matriz. Talvez algo como isso.

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

Repita conforme necessário.

Outras dicas

Use um NSNumber para embrulhar o seu float, porque o dicionário precisa de um objeto:

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

recuperá-la enviando floatValue:

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

código não foi testado.

Você pode envolver muitos outros tipos de dados em NSNumber também, verificar o documentação . Há também NSValue é para algumas estruturas como NSPoint e NSRect.

Em cacau, o NSMutableDictionary (e todas as coleções, realmente) exigem objetos como valores, para que você não pode simplesmente passar em qualquer outro tipo de dados. Como ambos sjmulder e Ryan sugeriu, você pode envolver seus valores escalares em casos de NSNumber (por número) e NSValue para outros objetos.

Se você está representando um número decimal, para algo como um preço, gostaria de sugerir também olhando e usando NSDecimalNumber . Você pode, então, evitar problemas de ponto flutuante imprecisão, e geralmente você pode usar e armazenar o "valor" como NSDecimalNumber em vez de representá-lo com uma primitiva no código.

Por exemplo:

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

// ...

[prices addObject:price];
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);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top