2016-12-13 9 views
0

データベースのフィールドが数字と等しい場合は、特定の数のイメージを自分のビューに表示する必要があります。ステートメントが結果を表示しない場合?

などです。 3枚の画像は (隠れ2、3可視)

以下のコードは、ランクが0に等しいときに動作が、何らかの理由で、もし表示されなければならないよりも、フィールド「星の格付けは」、3に等しい場合「星の評価」フィールドが他の数字(3など)と等しい場合、5つの画像はすべて表示されますか?何か不足していますか?前の内側のif文

.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

あなたは、それぞれを持っています。

星格付けが "1"の場合、最初のif文の本体が実行されます。そのif文の中で、次のif文は星評価が "2"の場合にのみ実行されます。しかし、あなたはすでにそれが "1"であると決めました。

if文のような一連のif文を使用する場合は、各if文を閉じて、その後に別のif文を付ける必要があります。しかし、switchステートメントはこの状況のた​​めのより良い構成です。星の評価をnitに変換し、switch文を使用します。

関連する問題