2016-11-13 13 views
-1

配列が空であるかどうかを調べるif/else文を実行しようとしています。最初の条件が評価され満たされないように見えるので、elseに移動して実行します。これは、画面(iOS版)に出力されます:条件が満たされてもif文の内容が実行されないようです

enter image description here

else文が実行されますので、ご覧の名前があります。しかし、表示されていない0のスコアを持つ他の3つのユーザー名があります。ここで、関連する条件である:

NSArray *keyArray = [yy allKeys]; 
for(NSString *keyd in keyArray) { 
    NSLog(@"yy objectforkey *********: %@", [[yy objectForKey:keyd] debugDescription]); 

    if(![yy objectForKey:keyd]){ 

     NSMutableDictionary* entry = [NSMutableDictionary new]; 

     NSLog(@"inside yy object for key count 0 *****####***##*#*#*#"); 
     [tableData addObject:keyd]; 
     [matchesForUser addObject:@"0"]; 
     entry[@"username"] = keyd; 
     entry[@"matches"] = @"0"; 
     [entries addObject:entry]; 
    } 

    else { 
     NSMutableArray *locs = [[NSMutableArray alloc] initWithArray:[yy objectForKey:keyd]]; 
     //NSString *outerouter; 
     //NSNumber *outeroutermatches = [NSNumber numberWithInt:0]; 
     for(NSDictionary *outterar in locs) { 

      NSMutableDictionary* entry = [NSMutableDictionary new]; 

      NSLog(@"%@ outtererjar descriptiong ##(#(#(#(#(#(#(#(#(#((#", [outterar description]); 

      entry[@"username"] = keyd; 

      entry[@"matches"] = [outterar valueForKey:@"groupmatches"]; 

      if([entries count] > 0) { 
       for(int counter = 0; counter < [entries count]; counter++) { 
        if([[[entries objectAtIndex:counter] valueForKey:@"matches"] intValue] < [[entry valueForKey:@"matches"] intValue]) { 
         NSLog(@"GETTING IN IFFFFFF ABOOOVVEEEEE ******8888888*********"); 

         //NSMutableDictionary *stud = [[NSMutableDictionary alloc] initWithObjectsAndKeys:keyd, @"username", nil]; 
         [matchesForUser addObject:[outterar objectForKey:@"groupmatches"]]; 
         [tableData addObject:keyd]; 

         NSLog(@"%@ WHAT IS ENTRIES>>>!!!!??!?!?!", [[entries objectAtIndex:counter] valueForKey:@"username"]); 
         if([keyd isEqualToString:[[entries objectAtIndex:counter] valueForKey:@"username"]]) { 
          NSLog(@"GETTING IN IFFFFFF ******8888888*********"); 
          [entries removeObjectAtIndex:counter]; 
          [entries insertObject:entry atIndex:counter]; 
         } 
         else { 
          [entries addObject:entry]; 
         } 
        } 
        else { 
         [entries addObject:entry]; 
        } 
       } 
      } 
      else { 
       [matchesForUser addObject:[outterar objectForKey:@"groupmatches"]]; 
       [tableData addObject:keyd]; 
       [entries addObject:entry]; 
      } 
     } 
    } 
} 
_tableViewScore

tableDataUIScrollView(単数または複数)を取り込むために使用される両方の配列です。 if文の中のコードは、空のオブジェクトが見つかるたびに(配列である)実行されるべきです。 elseが実行されます。つまり、ユーザー名がスコアで表示されますが、配列がnullの場合にifが実行されないようです。

I出力は、私がチェックしていたオブジェクトが、空のオブジェクトは、次のようになります

yy objectforkey *********: <__NSArrayM 0x170454cd0>(

) 

オブジェクトのいずれかがそのようであるとき、私はちょうど識別できるようにする必要があります。ありがとう!

+0

よりも、もっと説明変数の命名を使用することを考えてみましょうか? – ewizard

答えて

2

ライン

![yy objectForKey:keyd] 

チェック

キーkeydは、プロパティallKeysによって返されたすべてのキーがあるので、常にもちろんfalseある辞書

には存在しません。存在することが保証されており、既存のキーの値はでdeにすることはできません終わり。配列が空かどうかをチェックしたい場合は

あなたは

![[yy objectForKey:keyd] count] 

PSを記述する必要があります。私は、-1の説明を取得することができ、むしろyy

+0

この答えは、 'NSDictionary'のキーに' nil'値を格納できないという事実を述べると、より意味があります。 – rmaddy

+0

ありがとうございました...ああ、時々私は変数名で急いでいます - 悪いと試してみてください;) – ewizard

+0

私はあなたが正しいと思っていましたが、今私はアプリを終了し、試してスコアボードにアクセスしてください....もし私がすでにアプリに入っていてスコアボードを選択していればうまく動作します。 – ewizard

関連する問題