Domanda

Sono nuovo nello sviluppo di Objective-C e iPhone e sto provando a memorizzare valori in virgola mobile in un NSMutableArray, ma quando lo faccio ricevo un errore che dice " tipo incompatibile per l'argomento 1 di 'addObject " ;. Che cosa sto facendo di sbagliato? Sto cercando di creare una serie di doppi con cui posso eseguire calcoli matematici.

È stato utile?

Soluzione

NSMutableArray contiene solo oggetti, quindi si desidera caricare un array con oggetti NSNumber. Crea ogni NSNumber per contenere il doppio, quindi aggiungilo al tuo array. Forse qualcosa del genere.

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

Ripeti se necessario.

Altri suggerimenti

Usa un NSNumber per avvolgere il tuo float, perché il dizionario ha bisogno di un oggetto:

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

recuperalo inviando floatValue:

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

Il codice non è testato.

Puoi avvolgere molti altri tipi di dati anche in NSNumber, controlla la documentazione . C'è anche NSValue per alcune strutture come NSPoint e NSRect.

In Cocoa, NSMutableDictionary (e tutte le raccolte, in realtà) richiedono oggetti come valori, quindi non puoi semplicemente passare nessun altro tipo di dati. Come suggerito sia da Sjmulder che da Ryan, puoi racchiudere i tuoi valori scalari nelle istanze di NSNumber (per numero) e NSValue per altri oggetti.

Se stai rappresentando un numero decimale, per qualcosa come un prezzo, suggerirei anche di guardare e usare NSDecimalNumber . È quindi possibile evitare problemi di inesattezza in virgola mobile e in genere è possibile utilizzare e memorizzare il & Quot; valore & Quot; come NSDecimalNumber invece di rappresentarlo con una primitiva nel codice.

Ad esempio:

// 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);
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top