我有以下属性:
@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但是已经谷歌并且看到它在处理货币时会被使用。有人可以指出我可以使用的辅助功能,这将允许我做我想做的事情吗?
感谢
答案 0 :(得分:4)
使用:
myManager.askingPrice = [NSDecimalNumber decimalNumberWithString:self.askingPriceTextField.text]
答案 1 :(得分:2)
askingPrice
中的myManager
属性是NSDecimalNumber
,是一个Cocoa类,它围绕十进制数包装对象。您的askingPriceTextField.text
为您提供了NSString
,您可以转换为float
或double
。
所以基本上你要做的就是在你的文本字段中使用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方案,因为您将属性设置为assign
ed。由于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];
这样做会有效,因为在设置时,您的askPrice属性将为retain
。
此外,不要忘记确保您的文本字段的内容实际上可以转换为双...