我有一个表格 View ,其中包含许多地方,其评级是使用解析中的云代码计算的。我目前使用 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 个评级图像的最佳方式?
最佳答案
每当您看到 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]];
关于ios - 在 Objective C 中不使用 switch 语句显示评级图像的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28710935/