不使用Objective C中的switch语句显示评级图像的最佳实践

时间:2015-02-25 04:06:48

标签: ios objective-c nsstring

我有一个包含许多地方的表格视图,其评级是使用解析中的云代码计算的。我目前使用switch语句根据获得的评级显示图像。这是我目前的代码。

[PFCloud callFunctionInBackground:@"calculateRating"
                   withParameters:@{@"place":cell.placeName.text}
                            block:^(NSNumber *ratings, NSError *error) {
                                if (!error) {
                                    NSLog(@"%@ has %d starts",cell.placeName.text,[ratings intValue]);
                                    rating = [ratings intValue];
                                    switch(rating) {
                                        case 1:
                                            cell.ratingImage.image=[UIImage imageNamed:@"1Stars.png"];
                                            break;
                                        case 2:
                                            cell.ratingImage.image=[UIImage imageNamed:@"2Stars.png"];
                                            break;
                                        case 3:
                                            cell.ratingImage.image=[UIImage imageNamed:@"3Stars.png"];
                                            break;
                                        case 4:
                                            cell.ratingImage.image=[UIImage imageNamed:@"4Stars.png"];
                                            break;
                                        case 5:
                                            cell.ratingImage.image=[UIImage imageNamed:@"5Stars.png"];
                                            break;

                                        default:
                                            break;
                                    }

                                }

                        }];

我尝试了以下代码来解决问题,但它无法正常工作。

NSString *ratingImageName=[NSString stringWithFormat:@"%dStars.png",(int) ratings];
                                    cell.ratingImage.image=[UIImage imageNamed:ratingImageName];

我收到以下错误。 - [NSNull intValue]:无法识别的选择器发送到实例0x108572ce0

根据检索到的评分,任何人都可以帮助我显示我拥有的5张评分图片吗?

2 个答案:

答案 0 :(得分:3)

每当你看到switch之类的时候,想想“阵列”。

制作NSArray,以kStars.png索引为k的方式预先填充图片,并将其放在实例变量中:

_ratingImages = @[
    [UIImage imageNamed:@"0Stars.png"]
,   [UIImage imageNamed:@"1Stars.png"]
,   [UIImage imageNamed:@"2Stars.png"]
,   [UIImage imageNamed:@"3Stars.png"]
,   [UIImage imageNamed:@"4Stars.png"]
,   [UIImage imageNamed:@"5Stars.png"]
];

现在您可以使用单个作业替换开关:

cell.ratingImage.image=_ratingImages[rating];

这种方法的一个重要优点是图像只创建一次,并缓存在类实例上。这样可以避免不必要的查找和对象构建。

注意:如果您想让代码正常工作,那么它无效的原因是您使用的是强制转换,而不是调用intValue

NSString *ratingImageName=[NSString stringWithFormat:@"%dStars.png",[ratings intValue]];

答案 1 :(得分:0)

希望此代码能够在一行中解决问题。 [UIImage imageNamed:[NSString stringWithFormat:@“%dStars.png”,rating]];