Comparar dos NSMutableArray

Tengo un NSMutableArray que contiene valores NSMutableDictionary. Tengo que identificar un valor de dictionary particular existente en ese NSMutableArray o no?

NSMutableArray:

tableData:

{ { categories = 267; "category_ids" = 267; "created_at" = "2012-04-18 05:32:10"; "custom_design_from" = "2010-12-03 00:00:00"; } { categories = 267; "category_ids" = 267; "created_at" = "2012-04-18 05:32:10"; "custom_design_from" = "2010-12-03 00:00:00"; } } 

Tengo que identificar el valor del dictionary particular.

Mi código:

 if ( [tableData containsObject:[appDelegate.Product objectAtIndex:i]] ) { // Return Always false... } 

Por lo que recuerdo, containsObject: método de verificación si array contiene un object dado enviando isEqual: post a todas las instancias en él. La class NSDictionary tiene el método isEqualToDictionary: el contenido del dictionary de comares. Puedes intentar hacer algo así

 - (BOOL) dictionaryArray:(NSMutableArray*)array containsDictionary:(NSDictionary*)givenDictionary { BOOL result = NO; for( NSDictionary* dict in array ) { if( [dict isEqualToDictionary:givenDictionary] ) { result = YES; } } return result; } 

este método debería regresar si su matriz contiene un dictionary dado al llamar

 NSDictionary* dict = [appDelegate.Product objectAtIndex:i]; if ( [self dictionaryArray:tableData containsDictionary:dict] ) { // do what you need } 

Eso podría suceder si los 2 dictionarys contienen los mismos datos pero no son el mismo object. Por ejemplo ( NSDictionary )

 NSDictionary *d1 = [NSDictionary dictionaryWithObject:@"1" forKey:@"1"]; NSDictionary *d2 = [NSDictionary dictionaryWithObject:@"1" forKey:@"1"]; if(d1 == d2) //Does note get called 

s1 tiene los mismos datos de s2, pero los objects son diferentes, por lo que una testing de igualdad normal nunca funcionará

Eso es quizás lo que te está pasando. Puedes tener 2 dictionarys con la misma estructura de datos, pero en realidad no son el mismo object.

Tendrá que elaborar más información sobre sus dictionarys, probando las cadenas o identificaciones reales en el dictionary NSDictionary

Dos objects que contienen datos idénticos normalmente no son idénticos. Un ejemplo:

 NSMutableArray* array1 = [NSMutableArray arrayWithObjects:@"a", nil]; NSMutableArray* array2 = [NSMutableArray arrayWithObjects:@"x", @"y", nil]; NSMutableArray* array3 = array2; 

Ahora, por supuesto, array1 es un object diferente a array2 mientras que array2 y array3 son los mismos objekt.

 1: a 2: x, y 3: x, y 

Entonces, cambiemos uno de ellos:

 [array1 replaceObjectAtIndex:0 withObject:@"x"]; [array1 addObject:@"y"]; 

Ahora las tres matrices tienen el mismo contenido, pero aún array1 y array 2 son objects diferentes:

 1: x, y 2: x, y 3: x, y 

Hagamos otro cambio:

 [array2 addObject:@"z"]; 

Como array1 es un object diferente, entonces array2, el cambio de array 2 no afectó a array1. Pero array2 es idéntico a array3 (array2 y array3 son solo dos nombres para la misma cosa):

 1: x, y 2: x, y, z 3: x, y, z