40 votes

Test si NSMutableArray contient un objet chaîne

J'ai un NSMutableArray qui contient quelques objets NSString . Comment puis-je tester si le tableau contient un littéral de chaîne particulier?

J'ai essayé [array containsObject:@"teststring"] mais cela ne fonctionne pas.

87voto

Adam Wright Points 31715

Ce que vous faites devrait bien fonctionner. Par exemple

 NSArray *a = [NSArray arrayWithObjects:@"Foo", @"Bar", @"Baz", nil];
NSLog(@"At index %i", [a indexOfObject:@"Bar"]);
 

Enregistre correctement "à l'index 1" pour moi. Deux faiblesses possibles:

  1. indexOfObject envoie isEqual messages pour faire la comparaison - vous n'avez pas remplacé cette méthode dans une catégorie?
  2. Assurez-vous que vous testez contre NSNotFound pour l'échec de la localisation, et non (par exemple) 0.

77voto

Bogdan Points 1091

[array indexOfObject: object]! = NSNotFound

8voto

Henrik Hartz Points 1919

La comparaison avec les littéraux de chaîne ne fonctionne que dans les exemples de code. Dans le monde réel, il est souvent nécessaire de comparer les instances NSString * dans un tableau par exemple. Dans ce cas, conteObject échoue car il se compare à l'objet et non à la valeur.

Vous pouvez ajouter une catégorie à votre implémentation qui étend NS (Mutable) Array avec une méthode pour vérifier si elle contient la chaîne (ou tout autre type avec lequel vous devez comparer).

 @implementation NSMutableArray (ContainsString)
-(BOOL) containsString:(NSString*)string
{
  for (NSString* str in self) {
    if ([str isEqualToString:string])
      return YES;
  }
  return NO; 
}
@end
 

6voto

Bruno Points 81

Vous pouvez également utiliser un prédicat:

 NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@", theArray];
BOOL result = [predicate evaluateWithObject:theString];
 

5voto

mihir mehta Points 8182

pour chaque objet

 [(NSString *) [array objectAtIndex:i] isEqualToString:@"teststring"];
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X