私はObjective-CとiPhone開発に不慣れで、浮動小数点値をNSMutableArrayに格納しようとしていますが、そうすると「addObjectの引数1に互換性のない型」というエラーが表示されます。何が悪いのですか?私は数学計算を実行できるdoubleの配列を作成しようとしています。
NSMutableArrayはオブジェクトのみを保持するため、配列にNSNumberオブジェクトをロードする必要があります。 doubleを保持する各NSNumberを作成し、それを配列に追加します。おそらくこのようなものです。
NSMutableArray *array = [[NSMutableArray alloc] init];
NSNumber *num = [NSNumber numberWithFloat:10.0f];
[array addObject:num];
必要に応じて繰り返します。
辞書にはオブジェクトが必要なので、NSNumberを使用してフロートをラップします。
[myDictionary setObject:[NSNumber numberWithFloat:0.2f] forKey:@"theFloat"];
/* or */
[myDictionary setObject:@0.2f forKey:@"theFloat"];
floatValueを送信して取得します。
float theFloat = [[myDictionary objectForKey:@"theFloat"] floatValue];
コードはテストされていません。
他の多くのデータ型をNSNumberでラップすることもできます documentation を確認してください。 NSPointやNSRectなどの一部の構造には NSValue もあります。
Cocoaでは、NSMutableDictionary(および実際にはすべてのコレクション)は値としてオブジェクトを必要とするため、他のデータ型を単純に渡すことはできません。 sjmulderとRyanの両方が示唆したように、NSNumber(数値用)および他のオブジェクトのNSValueのインスタンスでスカラー値をラップできます。
価格のような10進数を表す場合は、 NSDecimalNumber も確認して使用することをお勧めします。その後、浮動小数点の不正確な問題を回避できます。また、コードでプリミティブを使用する代わりに、「値」を NSDecimalNumber として一般的に使用および格納できます。
例えば:
// 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);