[NSDecimalNumber Length]:发送到实例的无法识别的选择器

时间:2015-10-07 22:47:59

标签: objective-c unrecognized-selector nsdecimalnumber

我在一个简单的TableViewController项目上遇到错误,因为我试图将NSDecimalNumber对象强制转换为CheckValue.text标签的文本,作为{{1}的一部分方法。

说实话,我正在尝试这样做,因为我需要在TableCell上显示cellForRowAtIndexPath的值。任何人都可以帮忙,因为我觉得我在这里接近一颗子弹?

以下是TableViewController.m

中的代码
NSDecimalNumber

3 个答案:

答案 0 :(得分:0)

NSDecimalNumber继承自NSNumber,因此NSNumberFormatter格式化程序可用于获取所需的字符串表示形式。

以下是一个示例,根据您的需求进行更改:

- (NSString *)formatNumber:(NSDecimalNumber *)number {
    NSNumberFormatter *numberFormatter = [NSNumberFormatter new];
    [numberFormatter setMinimumFractionDigits:2];
    numberFormatter.usesGroupingSeparator = YES;

    return [numberFormatter stringFromNumber:number];
}

示例:

number     returns
12456.3  12,456.30  
12           12.00  
12.3456      12.35  

我在示例计算器应用程序中使用了它。

如果将formatNumber方法添加到TableViewController类:

cell.CheckValue.text = [self formatNumber:_CheckValue[row]];

为了更容易调试(总是一件好事)

NSDecimalNumber *checkValueDecimal = _CheckValue[row];
NSString *checkValueString = [self formatNumber:_ checkValueDecimal];
cell.label.text = numberString;

这样就可以检查每一步,编译器会在发布版本上对其进行优化。

答案 1 :(得分:0)

UIlabel显示类NSString的对象,您作为参数NSDecimalNumber传递,当您设置文本时,检查传入的值包括length(Lenght方法),因为该对象不支持此方法 - 抛出错误。解决方案 - 将NSDecimalNumber转换为NSString。 例如:

cell.CheckValue.text = [_CheckValue[row] stringValue];

答案 2 :(得分:-1)

您可以使用NSDecimalNumber值格式化字符串

cell.CheckValue.text = [NSString stringWithFormat:@"%@",_CheckValue[row]]