NSArray containsObject méthode
J'ai une simple question concernant xcode de codage mais je ne sais pas pourquoi les choses ne sont pas aussi performants que je pense. J'ai un tableau d'objets (objets personnalisés). Je veux juste vérifier si celui-ci est à l'intérieur de la matrice. J'ai utilisé le code suivant:
NSArray *collection = [[NSArray alloc] initWithObjects:A, B, C, nil]; //A, B, C are custom "Item" objects
Item *tempItem = [[Item alloc] initWithLength:1 width:2 height:3]; //3 instance variables in "Item" objects
if([collection containsObject:tempItem]) {
NSLog(@"collection contains this item");
}
Je suppose que le dessus de la vérification de me donner un résultat positif, mais il ne l'est pas. De plus, j'ai vérifié si les objets créés sont les mêmes.
NSLog(@"L:%i W:%i H:%i", itemToCheck.length, itemToCheck.width, itemToCheck.height);
for (int i = 0, i < [collection count], i++) {
Item *itemInArray = [collection objectAtIndex:i];
NSLog(@"collection contains L:%i W:%i H:%i", itemInArray.length, itemInArray.width, itemInArrayheight);
}
Dans la console, c'est ce que j'ai:
L:1 W:2 H:3
collection contains L:0 W:0 H:0
collection contains L:1 W:2 H:3
collection contains L:6 W:8 H:2
Évidemment le tempItem
est à l'intérieur de la collection
tableau, mais rien ne s'affiche lorsque j'utilise containsObject:
pour le vérifier. Quelqu'un pourrait-il me donner une certaine direction, partie de qui je me trompe? Merci beaucoup!
source d'informationauteur Anthony
Vous devez vous connecter pour publier un commentaire.
La documentation pour
[NSArray containsObject:]
dit:Le problème, c'est que vous comparez des références à des objets plutôt que les valeurs des objets. Pour faire de cet exemple spécifique de travail, vous aurez besoin d'envoyer
[collection containsObject:]
une instance d'une variable qu'il contient (par exempleA
B
ouC
), ou vous aurez besoin de remplacer le[NSObject isEqual:]
méthode dans votreItem
classe.C'est ce que votre
isEqual
méthode pourrait ressembler à:Pour une meilleure mise en œuvre, vous pouvez regarder cette question.