3

私は次のプロパティを持っています:

@property (nonatomic, assign) NSDecimalNumber askingPrice;

テキストフィールドから値を設定しようとしています:

myManager.askingPrice = [self.askingPriceTextField.text doubleValue];

次の警告が表示されます。

Assigning to 'NSDecimalNumber' from incompatible type 'double'

また、次のような値を取得しようとすると:

[NSDecimalNumber numberWithDouble:myManager.askingPrice];

エラーが発生します:

 Sending 'NSDecimalNumber' to parameter of incompatible type 'double'

以前に NSDecimalNumber を使用したことはありませんが、Google で通貨を扱うときに使用されることを確認しました。誰かが私がやろうとしていることを実行できるヘルパー関数を指摘できますか?

ありがとう

4

2 に答える 2

4

使用する:

myManager.askingPrice = [NSDecimalNumber decimalNumberWithString:self.askingPriceTextField.text]
于 2012-08-01T19:06:04.123 に答える
2

askingPriceプロパティmyManagerNSDecimalNumber、オブジェクトを 10 進数でラップする Cocoa クラスです。Yourは、またはに変換できる をaskingPriceTextField.text与えます。NSStringfloatdouble

したがって、基本的にやりたいことは、テキスト フィールドでNSDecimalNumberを使用して新しいものを作成することです。NSString方法は次のとおりです。

double askingPriceDouble = [self.askingPriceTextField.text doubleValue]; // extract a double from your text field
myManager.askingPrice = [[NSDecimalNumber alloc] initWithDouble:askingPriceDouble]; //create an NSDecimalNumber using your previously extracted double

プロパティをassigned に設定しているため、ここでは alloc-init スキームを使用しています。anNSDecimalNumberはオブジェクトなので ( のような基本型ではないdouble)、必要になる前に割り当てが解除されないように、提示価格がretained であることを確認する必要があります。これを行う別の方法は、次のようにプロパティを宣言することです。

@property(nonatomic, retain) NSDecimalNumber *askingPrice; // Do not forget the '*' sign when declaring object properties as pointers.

その後:

double askingPriceDouble = [self.askingPriceTextField.text doubleValue];
myManager.askingPrice = [NSDecimalNumber numberWithDouble:askingPriceDouble];

設定すると、askingPrice プロパティがretained になるため、これは機能します。

また、テキスト フィールドの内容が実際に double に変換できることを確認することを忘れないでください...

于 2012-08-01T19:09:56.560 に答える