У меня есть табличное представление с рядом мест, рейтинг которых рассчитывается с использованием облачного кода при синтаксическом анализе. В настоящее время я использую оператор 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 изображений с рейтингом, которые у меня есть в соответствии с полученным рейтингом?

1
Naveen George Thoppan 25 Фев 2015 в 07:06

2 ответа

Лучший ответ

Когда вы видите такой 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]];
3
Sergey Kalinichenko 25 Фев 2015 в 04:11

Надеюсь, этот код решит проблему в одной строке. [UIImage imageNamed: [NSString stringWithFormat: @ "% dStars.png", рейтинг]];

0
Naveen George Thoppan 25 Фев 2015 в 05:16