将NSString从数组中的indexpath.row格式化为货币格式

时间:2012-10-04 19:28:35

标签: iphone

您好我正在尝试从货币格式的数组中转换indexPath.row中的字符串。以下是我的代码。但是当我在手机上运行时,lbl中没有任何内容 - 它是空白的。感谢帮助!谢谢!

            NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
        [formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
        NSString *groupingSeparator = [[NSLocale currentLocale] objectForKey:NSLocaleGroupingSeparator];
        [formatter setGroupingSeparator:groupingSeparator];
        [formatter setGroupingSize:3];
        [formatter setAlwaysShowsDecimalSeparator:NO];
        [formatter setMaximumFractionDigits:0]; //No decimal showings - to show 2 decimal digits enter 2 instead of 0
        [formatter setUsesGroupingSeparator:YES];

        totalnoformat = [[NSNumber alloc]init];
        totalSCformat = [[NSString alloc]init];

        totalnoformat = [total objectAtIndex:indexPath.row];
        totalSCformat = [formatter stringFromNumber:totalnoformat];

        cell.amountlbl.text = totalSCformat;

1 个答案:

答案 0 :(得分:0)

您的代码有几个您可能想要清理的问题。以下是一些建议。

  1. 您的数字格式化程序不应在内部初始化 cellForRowAtIndexPath:因为它每次都会创建一个新的 细胞初始化或出列。使格式化程序成为属性 您的视图控制器并在viewDidLoad中初始化一次。

  2. 您对alloc / init的调用:

    totalnoformat = [[NSNumber alloc]init];
    totalSCformat = [[NSString alloc]init];
    

    是不必要的。你应该删除它们。

  3. 您应确保已正确初始化total数组,并确实已将值添加到其中。在此行设置一个断点:

    totalnoformat = [total objectAtIndex:indexPath.row];
    

    当它中断时,将鼠标指针悬停在total变量上 并查看调试器所说的内存地址是什么。如果它是 0x0000,然后它是零并且尚未初始化。同样的 鼠标悬停在变量上的技巧也会告诉你多少 项目在数组中。

  4. 您似乎已创建自定义单元格。你有几个潜力 这样做的问题。您需要确保自定义单元格 将其类设置为您的自定义单元类名称。你也有 确保您已将amountlbl财产与之相关联 插座,否则设置其文本将无能为力。

  5. 如果没有别的办法,可能是您的电话号码存在问题 格式化。注释掉您设置的所有格式化程序属性 并尝试这样的小事:

    NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init];
    [formatter setNumberStyle:NSNumberFormatterCurrencyStyle];
    

    然后尝试使用如下静态数字设置单元格文本:

    cell.amountlbl.text = [formatter stringFromNumber:
                                            [NSNumber numberWithFloat:4.75]];