2010-09-28 5 views
1

J'ai cette boucle while dans mon code. La boucle semble fonctionner correctement depuis que j'ai imprimé mon i++ dans la console. Mais pour une raison quelconque, il vérifie seulement ma déclaration if la première fois. Je peux seulement ajouter un titre dans le NSMutableArray appelé sectionZeroTitleArray. J'ai beaucoup de tableaux dans cette boucle, donc ça pourrait être déroutant. Je vais essayer de mon mieux pour expliquer.While-Loop fonctionne mais pas l'instruction if?

Voici ce que j'essaie de faire: Boucle sur la longueur d'un tableau (topicArray). Si le tableau (topicArray) est le même que le premier objet (anotherArray) de cet autre tableau, ajoutez un objet ayant le même index (titleArray) que topicArray à un nouveau MutableArray (sectionZeroTitleArray).

Je suis sûr que j'ai fait quelque chose de stupide, peut-être que quelqu'un qui n'a pas regardé ça toute la journée peut me réparer? S'il te plaît et merci.

while (i < (topicArray.count)) { 
    if ([topicArray objectAtIndex:i] == [anotherArray objectAtIndex:0]) { 
    [sectionZeroTitleArray addObject:[titleArray objectAtIndex:i]]; 
    } 
    NSLog(@"sectionZeroLoopCount: %d", i); 
    i++; 
} 
+0

Ajoutez les éléments suivants avant l'instruction if: 'NSLog (@" topicArray valeur:% @, autreArray valeur:% @ ", [topicArray objectAtIndex: 1], [anotherArray objectAtIndex: 0]);' –

+0

exactement le même objet deux fois? Sinon, c'est tout à fait naturel, ça ne va qu'une fois dans les if-brackets. Bien sûr, vous ne voulez pas dire "objectAtIndex: i"? – Phlibbo

+1

De même, quels sont les types d'objets stockés dans les tableaux? Souvent, vous voulez utiliser isEqual: ou isEqualToString: plutôt que ==. –

Répondre

5

Vous vérifiez pour l'égalité de pointeur lorsque vous utilisez ==. Es-tu sûr de vouloir faire ça? Quel est le type que vous attendez? Si c'est un NSString, utilisez isEqualToString:, sinon utilisez NSObject méthode « s isEqual::

Si le type attendu est un NSString:

if([[topicArray objectAtIndex:i] isEqualToString:[anotherArray objectAtIndex:0]]) { 
    //... 
} 

Sinon, vous devriez probablement faire ceci:

if([[topicArray objectAtIndex:i] isEqual:[anotherArray objectAtIndex:0]]) { 
    //... 
} 
1

Oui, vous comparez les pointeurs et non les valeurs. Regardez la documentation de NSString, en particulier la méthode isEqualToString: pour comparer les chaînes.

Questions connexes