我有一个包含许多地方的表格视图,其评级是使用解析中的云代码计算的。我目前使用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张评分图片吗?
答案 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]];