2016-11-13 4 views
-1

Ich versuche eine if/else-Anweisung auszuführen, bei der geprüft wird, ob ein Array leer ist. Es scheint so, als ob die erste Bedingung ausgewertet und nicht erfüllt wird, und so bewegt sie sich zum else und führt sie aus. Dies ist die Ausgabe auf dem Bildschirm (iOS):Wenn die Bedingung erfüllt ist, aber der Inhalt der if-Anweisung scheinbar nicht ausgeführt wird

enter image description here

Der Name, den Sie sehen, gibt es, da die else-Anweisung ausgeführt wird. Es gibt jedoch 3 andere Benutzernamen mit Werten von 0, die nicht angezeigt werden. Hier ist die relevante Bedingung:

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 und tableData sind beide Arrays, die verwendet werden die UIScrollView (n) zu füllen. Der Code in der if-Anweisung sollte jedes Mal ausgeführt werden, wenn ein leeres Objekt gefunden wird (sie sind Arrays). Der else läuft, deshalb sehen Sie den Benutzernamen mit dem Ergebnis, aber es scheint, als ob das if nicht ausgeführt wird, wenn das Array null ist.

Wenn ich Ausgang das Objekt, das ich für bin Überprüfung, ein leeres Objekt sieht wie folgt aus:

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

) 

Ich muss nur in der Lage sein, wenn eines der Objekte zu identifizieren, wie das ist. Vielen Dank!

+0

kann ich eine Erklärung für die -1 erhalten? – ewizard

Antwort

2

Die Linie

![yy objectForKey:keyd] 

Kontrollen

existiert der Schlüssel keyd nicht im Wörterbuch

die immer natürlich ist false weil alle von der Eigenschaft zurückgegeben Schlüssel allKeys sind garantiert vorhanden und ein Wert für einen vorhandenen Schlüssel kann nicht nil by de sein Schluss.

Wenn Sie überprüfen wollen, ob das Array leer ist, müssen Sie

![[yy objectForKey:keyd] count] 

PS schreiben: Betrachten kräftigere Variablennamen zu verwenden, anstatt yy

+0

Diese Antwort macht mehr Sinn, wenn Sie die Tatsache erwähnen, dass Sie keinen 'Nil'-Wert für einen Schlüssel in' NSDictionary' speichern können. – rmaddy

+0

danke Jungs ... yah manchmal bin ich eilig mit den Variablen Namen - krank versuchen und besser;) – ewizard

+0

Ich dachte, du hättest Recht..aber jetzt merke ich das Problem passiert, wenn ich die App verlassen, dann geben Sie die App, dann versuchen Sie und greifen Sie auf die Anzeigetafel .... wenn ich bereits in der App bin und die Anzeigetafel auswählen, funktioniert es gut. – ewizard

Verwandte Themen