if语句没有显示结果?

时间:2016-12-13 03:24:33

标签: ios objective-c

如果我的数据库中的某个字段等于一个数字,则应在我的视图中显示一定数量的图像。

  

例如如果字段“星级”等于3,则应显示3个图像   (两个隐藏,3个可见)

当星级评分等于0时,以下代码有效,但出于某种原因,如果“星级”字段等于任何其他数字(例如3),则仍会显示所有5张图像?我错过了什么吗?

的.m

- (void)viewDidLoad {
    [super viewDidLoad];

    NSDictionary *neighbours = neighbourDetail;
    NSLog(@"This is neighbours detail info %@", neighbours);

    if ([[neighbourDetail objectForKey:@"star rating"] isEqual:@"0"]) {
        self.pawOne.hidden = YES;
        self.pawTwo.hidden = YES;
        self.pawThree.hidden = YES;
        self.pawFour.hidden = YES;
        self.pawFive.hidden = YES;

        if ([[neighbourDetail objectForKey:@"star rating"] isEqual:@"1"]) {
            self.pawOne.hidden = NO;
            self.pawTwo.hidden = YES;
            self.pawThree.hidden = YES;
            self.pawFour.hidden = YES;
            self.pawFive.hidden = YES;

            if ([[neighbourDetail objectForKey:@"star rating"] isEqual:@"2"]) {
                self.pawOne.hidden = NO;
                self.pawTwo.hidden = NO;
                self.pawThree.hidden = YES;
                self.pawFour.hidden = YES;
                self.pawFive.hidden = YES;

                if ([[neighbourDetail objectForKey:@"star rating"] isEqual:@"3"]) {
                    self.pawOne.hidden = NO;
                    self.pawTwo.hidden = NO;
                    self.pawThree.hidden = NO;
                    self.pawFour.hidden = YES;
                    self.pawFive.hidden = YES;

                    if ([[neighbourDetail objectForKey:@"star rating"] isEqual:@"4"]) {
                        self.pawOne.hidden = NO;
                        self.pawTwo.hidden = NO;
                        self.pawThree.hidden = NO;
                        self.pawFour.hidden = NO;
                        self.pawFive.hidden = YES;

                        if ([[neighbourDetail objectForKey:@"star rating"] isEqual:@"5"]) {
                            self.pawOne.hidden = NO;
                            self.pawTwo.hidden = NO;
                            self.pawThree.hidden = NO;
                            self.pawFour.hidden = NO;
                            self.pawFive.hidden = NO;
                        }
                    }
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:4)

主要问题是if语句的嵌套不当。如果值不是@"0",则永远不会检查任何其他值。

正确的格式是:

if (some condition 1) {
} else if (some condition 2) {
} else if (some condition 3) {
} else {
}

但是编写代码有一种更简单的方法:

- (void)viewDidLoad {
    [super viewDidLoad];

    NSDictionary *neighbours = neighbourDetail;
    int rating = [neighbourDetail[@"star rating"] intValue];
    self.pawOne.hidden = rating == 0;
    self.pawTwo.hidden = rating <= 1;
    self.pawThree.hidden = rating <= 2;
    self.pawFour.hidden = rating <= 3;
    self.pawFive.hidden = rating <= 4;
}

如果您的pawXXX观看次数不是数组,而是拥有5个不同的属性,那就更容易了。

答案 1 :(得分:1)

你在前一个语句中都有if语句。

如果星级为&#34; 1&#34;,则执行第一个if语句的正文。然后,在if语句中,只有在星级评分为&#34; 2&#34;时才会执行下一个if语句。但是你已经确定它已经确定了#&#34; 1&#34;。

如果您要使用一系列if语句,则需要关闭每个if语句,然后在此之后再使用单独的if语句。但是,对于这种情况,switch语句是更好的构造。将星级转换为nit并使用switch语句。