Cómo almacenar una matriz de dos objects

Tengo dos objects NSDictionary que son subelementos a un elemento principal en algunos datos xml que he devuelto desde mi server.

El xml se ve así:

<Car> <first element1="1" element2="2"> <second/> </first> <first element1="1" element2="2"> <second/> </first> <first element1="1" element2="2"> <second/> </first> </Car> 

Estoy guardando primero y segundo que contienen valores key en su propio object NSDictionary.

La cuestión es que puedo tener varios elementos del coche, por lo que necesito save una serie de elementos del coche que contienen el primer y segundo NSDictionaries, pero no estoy seguro de cómo hacerlo.

Cualquier ayuda sería muy apreciada.

Aquí está el esquema XML completo:

 <Eng> <Result > <Series > <Link/> <FMF/> <AlsoLink/> <Plugins/> </FMF> <Sheet > <Car> <first > <second/> </first> <second > <first/> </second> </Car> </Sheet> </Series> </Result> </Eng> 

Actualización a la pregunta:

 this is what my NSXMLParser methods are currently looking like - (void)startTheParsingProcess:(NSData *)parserData { NSXMLParser *parser = [[NSXMLParser alloc] initWithData:parserData]; //parserData passed to NSXMLParser delegate which starts the parsing process [parser setDelegate:self]; [parser parse]; // starts the event-driven parsing operation. } - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { if ([elementName isEqualToString:@"first"]) { parsedFirstMutableDictionary = [[NSMutableDictionary alloc] initWithDictionary:attributeDict]; } if ([elementName isEqualToString:@"second"]) { parsedSecondMutableDictionary = [[NSMutableDictionary alloc] initWithDictionary:attributeDict]; } if ([elementName isEqualToString:@"Car"]) { self.parsedDataArrayOfDictionaries = [NSMutableArray arrayWithCapacity:8]; } } - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { if ([elementName isEqualToString:@"first"]) { [parsedDataArrayOfDictionaries addObject:parsedFirstMutableDictionary]; [parsedDataArrayOfDictionaries addObject:parsedSecondMutableDictionary]; } } //etc 

todo funciona bien, sin embargo, si hay varios nodos primero y segundo cuando agrego pointbreaks a todos, se accede a todo en el order correcto, luego se pasa al método didEndElement, salta al primer nodo, agrega los attributes NS a las matrices correctamente, luego salta una copy de security para comenzar el análisis y, a partir de ese momento, se pierden los valores antiguos en los ParsedDataArrayOfDictionaries que se agregaron.

cualquier ayuda con esto sería muy apreciada.

No estoy seguro si esto requeriría una reescritura de su implementación, pero ¿no podría definir 3 NSMutableArray para almacenar sus datos allí?

  NSMutableArray * _fullCarList; NSMutableArray * _parsedFirstMutableDictionary; NSMutableArray * _parsedFirstMutableDictionary 

;

Y a continuación, agregue sus datos XML de sus respectivos dictionarys mutables a la correspondiente MutableArray, luego agregue los dos dictionarys a la matriz fullCarList?

 _fullCarList = [[NSMutableArray alloc] initWithObjects: _parsedFirstMutableDictionary, _parsedFirstMutableDictionary, nil]; 

Una matriz de arreglos.

Luego, puede repetir a través de _fullCarlist cada fila en _fullCarList tendría un primer y segundo elemento de dictionary mutable correspondiente.

De esta manera, todos sus datos se encuentran en una gran variedad y son mucho más accesibles. Personalmente, creo que una matriz es más fácil de analizar que XML.

No estoy 100% seguro de que entiendo lo que estás preguntando, pero si quieres save solo los primeros elementos primero y segundo que encuentres, testing:

 - (void)startTheParsingProcess:(NSData *)parserData { NSXMLParser *parser = [[NSXMLParser alloc] initWithData:parserData]; //parserData passed to NSXMLParser delegate which starts the parsing process [parser setDelegate:self]; [parser parse]; // starts the event-driven parsing operation. self.carArray = [NSMutableArray array]; // array of car dictionaries } - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { if ([elementName isEqualToString:@"first"]) { if ([carDictionary objectForKey: @"first"] == nil) [carDictionary setObject: attributeDict forKey: @"first"]; } if ([elementName isEqualToString:@"second"]) { if ([carDictionary objectForKey: @"second"] == nil) [carDictionary setObject: attributeDict forKey: @"second"]; } if ([elementName isEqualToString:@"Car"]) { carDictionary = [NSMutableArray dictionary]; } } - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { if ([elementName isEqualToString:@"Car"]) { [self.carArray addObject: carDictionary]; } } 

Esto le dará una variedad de autos (dictionarys) con un set de attributes para "primero" y "segundo".

Sin embargo, si desea conservar todos los elementos primero y segundo, puede crear una matriz de dictionarys de automobilees en los que "primero" y "segundo" son pointers a las matrices de dictionarys de attributes.

 - (void)startTheParsingProcess:(NSData *)parserData { NSXMLParser *parser = [[NSXMLParser alloc] initWithData:parserData]; //parserData passed to NSXMLParser delegate which starts the parsing process [parser setDelegate:self]; [parser parse]; // starts the event-driven parsing operation. self.carArray = [NSMutableArray array]; // array of car dictionaries } - (void)parser:(NSXMLParser *)parser didStartElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName attributes:(NSDictionary *)attributeDict { if ([elementName isEqualToString:@"first"]) { [firstArray addObject: attributeDict]; } if ([elementName isEqualToString:@"second"]) { [secondArray addObject: attributeDict]; } if ([elementName isEqualToString:@"Car"]) { firstArray = [NSMutableArray array]; secondArray = [NSMutableArray array]; carDictionary = [NSMutableDictionary dictionary]; [carDictionary setObject: firstArray forKey: @"first"]; [carDictionary setObject: secondArray forKey: @"second"]; } } - (void)parser:(NSXMLParser *)parser didEndElement:(NSString *)elementName namespaceURI:(NSString *)namespaceURI qualifiedName:(NSString *)qName { if ([elementName isEqualToString:@"Car"]) { [self.carArray addObject: carDictionary]; } } 

Ah, y, por último, probablemente desee agregar estas cosas cuando elementName es "Car" en didEndElement.

Está bien, solo para aclarar todo, todo con mi código está bien, solo que estaba invirtiendo ParsedDataArrayOfDictionaries dos veces, así que eran dos objects de él … cuando estaba jugando con el código para trabajar, puse un código en el que luego se olvidó … y luego networkingescubierto.

Inútil lo sé … pero arreglado, gracias por la ayuda.