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一个 Cocoa 类,它围绕十进制数字包装一个对象。你askingPriceTextField.text给你一个NSString你可以转换成一个floatdouble

所以基本上你想要做的是在你的文本字段中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

我在这里使用 alloc-init 方案,因为您将属性设置为assigned。由于 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 属性将retain在您设置它时被编辑。

另外,不要忘记确保您的文本字段的内容实际上可以转换为双精度...

于 2012-08-01T19:09:56.560 回答