2012-08-01 38 views
3

我有以下特性:NSDecimalNumber設置和獲取價值

@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'd,發現它是與貨幣交易時使用。有人可以指出我可以使用的幫助功能,這將允許我做我想做的事嗎?

感謝

回答

2

你在myManageraskingPrice屬性是NSDecimalNumber,可可類環繞十進制數的對象。您的askingPriceTextField.text爲您提供NSString,您可以將其轉換爲floatdouble

所以基本上你想要做的是在你的文本字段中使用NSString來構建一個新的NSDecimalNumber。這裏是你如何能做到這一點:

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 

我在這裏使用的alloc-INIT計劃,因爲你設置你的屬性爲assign版。由於NSDecimalNumber是一個對象(不是像double這樣的基本類型),所以您需要確保您的要價是retain,因此在您需要它之前不會釋放它。這樣做會宣佈你的財產這樣的另一種方式:

@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屬性爲retain ED,當你設置它。

而且,不要忘記,以確保您的文本字段的內容實際上可以被轉換爲雙...

4

用途:

myManager.askingPrice = [NSDecimalNumber decimalNumberWithString:self.askingPriceTextField.text] 
+0

哦,我已經錯過了'基於NSString'構造函數。 :) – LodeRunner 2012-08-01 19:11:36