質問

私は Objective-C と iPhone 開発の初心者で、NSMutableArray に浮動小数点値を格納しようとしていますが、実行すると「'addObject' の引数 1 に互換性のない型です」というエラーが表示されます。私の何が間違っているのでしょうか?数学計算を実行できる double の配列を作成しようとしています。

役に立ちましたか?

解決

NSMutableArrayのはオブジェクトのみを保持しているので、あなたは、配列をするNSNumberオブジェクトをロードすることにしたいです。 その後、あなたの配列にそれを追加するには、二重を保持するために、それぞれの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];

コードがテストされます。

あなたは<のhref =「http://developer.apple.com/DOCUMENTATION/Cocoa/Reference/Foundation/Classes/NSNumber_Class/Reference/Reference.html」RELを確認し、あまりにものNSNumberの他の多くのデータ型をラップすることができます= "nofollowをnoreferrer">ドキュメントの。 NSValue には、いくつかの構造にもありますNSPointとNSRectのような。

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);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top