0

您好我正在尝试将 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;
4

1 回答 1

0

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

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

  2. 您对 alloc/init 的调用:

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

    是不必要的。你应该删除那些。

  3. 您应该确保您的total数组已正确初始化,并且这些值实际上已添加到其中。在此行设置断点:

    totalnoformat = [total objectAtIndex:indexPath.row];
    

    当它中断时,将鼠标指针悬停在total变量上,看看调试器说它的内存地址是什么。如果它是 0x0000,那么它是 nil 并且没有被初始化。将鼠标悬停在变量上的相同技术也会告诉您数组中有多少项。

  4. 看来您已经创建了一个自定义单元格。这样做有几个潜在的问题。您需要确保您的自定义单元格的类设置为您的自定义单元格类名称。您还必须确保已将您的amountlbl财产连接到插座,否则设置其文本将无济于事。

  5. 如果其他方法都不起作用,则可能是您的数字格式化程序存在问题。注释掉您设置的所有格式化程序属性并尝试像这样的最小化:

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

    然后尝试使用这样的静态数字设置您的单元格文本:

    cell.amountlbl.text = [formatter stringFromNumber:
                                            [NSNumber numberWithFloat:4.75]];
    
于 2012-10-04T22:41:01.527 回答