J'ai un NSMutableArray
qui contient quelques NSString
objets. 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.
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:
indexOfObject
envoie isEqual
messages pour faire la comparaison - vous n'avez pas remplacé cette méthode dans une catégorie?NSNotFound
pour l'échec de la localisation, et non (disons) 0.[array indexOfObject:object] != NSNotFound
La comparaison avec les littéraux de chaîne ne fonctionne que dans les exemples de code. Dans le monde réel, vous devez souvent comparer les instances NSString *, par ex. un tableau, auquel cas containsObject échoue car il se compare à l'objet, pas à la valeur.
Vous pouvez ajouter une catégorie à votre implémentation qui étend le tableau NS (Mutable) 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
Vous pouvez également utiliser un prédicat:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF IN %@", theArray];
BOOL result = [predicate evaluateWithObject:theString];
pour chaque objet
[(NSString *) [array objectAtIndex:i] isEqualToString:@"teststring"];