Ho una semplice domanda riguardante la codifica xcode ma non so perché le cose non stanno funzionando come penso. Ho una matrice di oggetti (oggetti personalizzati). Voglio solo verificare se questo è all'interno dell'array. Ho usato il seguente codice: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");
}
Suppongo che il controllo di cui sopra mi darà un risultato positivo ma non lo è. Inoltre, ho controllato se gli oggetti creati sono gli stessi.
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);
}
Nella console, questo è quello che ho ottenuto:
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
Ovviamente il tempItem
si trova all'interno della matrice collection
ma non appare nulla quando uso containsObject:
controllarlo. Qualcuno potrebbe darmi qualche indicazione su quale parte mi sbaglio? Molte grazie!
Oh, mi dispiace, solo un errore di battitura per "Frutta", dovrebbe essere "Articolo". Intendi confrontare gli oggetti di classe personalizzati con containsObject: non funziona? – Anthony
Funziona, è solo il confronto di default usando un riferimento al tuo oggetto personalizzato. Se vuoi rendere 'tempItem' uguale a' A' nel tuo esempio precedente, dovrai semplicemente creare il metodo 'isEqual' sulla tua classe. – Senseful
@Anthony, pensa in questo modo: come potrebbe 'NSObject', che fornisce il confronto predefinito, sapere come viene definita l'uguaglianza per le tue classi personalizzate? Quali proprietà dovrebbe prendere in considerazione e quali no? –