在Cell的UILabel中显示NSDecimalNumber

时间:2015-11-21 16:23:13

标签: ios objective-c nsstring nsdecimalnumber

我试图在我的TableView Cell上的NSDecimalNumber中显示UILabel(我从BuyProductVariant获取价格)。我似乎无法正确使用代码。我得到的警告是:

  

"不兼容的指针类型从NSString分配   NSDecimalNumber"

我认为这意味着我无法分配NSDecimalNumber,因为它应该是一个字符串。所以我改为NSString,我仍然会收到警告。下面的代码应该是什么样的呢?

·H

@property (nonatomic, readonly, strong) NSDecimalNumber *price;

的.m

BUYProductVariant *productPrice = price[indexPath.row];
cell.priceLabel.text = productPrice.price;

2 个答案:

答案 0 :(得分:2)

最简单的方法是询问description

cell.priceLabel.text = productPrice.price.description;

(所有那些建议使用"%@"进行格式化的答案都是间接使用description。)

但如果这是一个价格,你可能想要像价格一样格式化它。例如,在美国,美元价格通常用小数点右边的两位数字和小数点左边每组三位数之前的逗号格式。因此,您应该向控制器添加description而不是使用NSNumberFormatter,而是使用它:

的.m

@interface ViewController ()
@property (nonatomic, strong) NSNumberFormatter *priceFormatter;
@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];

    self.priceFormatter = [[NSNumberFormatter alloc] init];
    self.priceFormatter.numberStyle = NSNumberFormatterCurrencyStyle;
    // If you don't want a currency symbol like $ in the output, do this:
    // self.priceFormatter.currencySymbol = nil;
}

- (void)showPrice:(NSDecimalNumber *)price inTextField:(UILabel *)label {
    label.text = [self.priceFormatter stringFromNumber:price];
}

您可以使用许多其他NSNumberFormatter属性来调整输出,因此如果需要,请查看class reference

更新

假设price被声明为NSArray

BUYProductVariant *productPrice = price[indexPath.row];
cell.priceLabel.test = [self.formatter stringWithNumber:productPrice.price];

答案 1 :(得分:0)

UILabel希望其文本值为NSString,因此您需要使用product.price的值创建一个字符串。

cell.priceLabel.text = [NSString stringWithFormat:@"%@", product.price];

重要的是你不能简单地转换(改变)NSDecimalNumber的类型,你必须以某种方式转换值。