2016-12-13 2 views
0

Если поле в моей базе данных равно числу, на мой взгляд должно быть отображено определенное количество изображений.если заявление не показывает результаты?

E.g., если поле «звезда рейтинг» равно 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; 
         } 
        } 
       } 
      } 
     } 
    } 
} 
+1

Я исправил форматирование кода, чтобы вы могли легко увидеть проблему. – rmaddy

ответ

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 отдельных свойств.

+0

Хороший звонок. Мне следовало бы взглянуть на код более внимательно. –

1

Вы должны каждый, если заявление внутри предыдущего.

Тело первого оператора if выполняется только в том случае, если номинал звезды равен «1». Затем внутри этого оператора if следующий оператор if будет выполняться только в том случае, если рейтинг звезды равен «2». Но вы уже определили, что это «1».

Если вы собираетесь использовать ряд утверждений if, то вам нужно закрыть каждый оператор if, а затем после этого иметь отдельный оператор if. Однако оператор switch является лучшей конструкцией для этой ситуации. Преобразуйте звездный рейтинг в nit и используйте оператор switch.

Смежные вопросы