Comprobar si una matriz contiene un object determinado (iOS)

Necesito verificar si una matriz determinada contiene un object determinado, y si lo hace, elimine ese object. Si no tiene ese object, se supone que la function se agrega a la matriz. El problema es que el object siempre se agrega porque la instrucción de comprobación siempre devuelve falso.

Aquí está mi function actual:

- (void) myFunction:(NSString *)parameter { if (![myMutableArray containsObject:parameter]) { [myMutableArray addObject:parameter]; NSLog(@"%@ added", parameter); } else { [myMutableArray removeObject:parameter]; NSLog(@"%@ deleted", parameter); } } 

containsObject llama a isEqual en cada uno de los objects en las matrices. ¿Qué tipo de object estás buscando? Si se trata de un object personalizado, anule e implemente el método isEqual.

Supongo que estás intentando verificar el valor del object, pero containsObject realmente llama a isEqual, que está comparando la reference al object y no su valor real.

 if (![arrList containsObject:arrObj]) { // do something } 

containsObject:

Primero debe verificar qué tipo de datos u object está agregando en myMutableArray . De acuerdo con su método, está comprobando en la matriz mutable para tipo de cadena que ha pasado el parameter argumento. Es posible que esté conteniendo array int o float.

Es posible que exista un problema de conversión de tipo en su matriz. Si su tipo de datos es STRING, puede usar otro método como este.

 - (void) myFunction:(NSString *)parameter { for (int i = 0 ; i < [myMutableArray count ] ; i++) { if (![[myMutableArray objectAtIndex:i] isEqualToString:parameter]) { [myMutableArray addObject:parameter]; NSLog(@"%@ added", parameter); } else{ [myMutableArray removeObject:parameter]; NSLog(@"%@ deleted", parameter); } } 

}

Espero que esto te ayudará. Si su object no es el tipo de NSString, entonces necesita convertir.

Debe implementar isEqual: en su class personalizada. Por defecto, dos objects son idénticos si comparten la misma reference.

También asegúrese de inicializar su matriz mutable antes de usarlo.

EDITAR :

Parece que el nombre de la variable de su matriz probablemente esté mal escrito.

  • myMutableArray
  • myMutbaleArray

Probablemente olvidó inicializar su NSMutableArray . Si no se inicializa, está enviando posts addObject a un object nil , que no tiene ningún efecto, y la matriz nunca contiene lo que agregó anteriormente …

Por supuesto, si la matriz es nil , entonces la comprobación de contenido siempre devolverá falso. De acuerdo con los documentos de Objective-C:

Si el método devuelve un object, cualquier tipo de puntero, cualquier integer escalares de tamaño menor o igual a sizeof (void *), un float, un doble, un doble largo, o un largo largo, entonces un post enviado a cero retorna 0 .

Y 0 es falso