Tengo una pregunta simple sobre la codificación de xcode pero no sé por qué las cosas no funcionan como creo. Tengo una matriz de objetos (objetos personalizados). Solo quiero comprobar si este está dentro de la matriz. He utilizado el siguiente código:NSArray containsObject method
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");
}
supongo que la comprobación anterior me va a dar un resultado positivo, pero no lo es. Además, verifiqué si los objetos creados son iguales.
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);
}
En la consola, esto es lo que tengo:
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
Obviamente, el tempItem
está dentro de la gama collection
pero no aparece nada cuando uso containsObject:
para comprobarlo. ¿Alguien podría darme una dirección, en qué parte estoy equivocado? ¡Muchas gracias!
Oh, lo siento, solo un error tipográfico para "Fruta", debería ser "Artículo". ¿Quiere decir comparar objetos de clase personalizados mediante containsObject: no funciona? – Anthony
Funciona, solo se compara por defecto con una referencia a su objeto personalizado. Si quiere hacer 'tempItem' igual a' A' en su ejemplo anterior, necesitará simplemente crear ese método 'isEqual' en su clase. – Senseful
@Anthony, piénselo de esta manera: ¿cómo podría 'NSObject', que proporciona la comparación predeterminada, saber cómo se define la igualdad para sus clases personalizadas? ¿Qué propiedades debería tener en cuenta y cuáles no? –