JSON array para vista de selección iPhone

Recibo estos datos de los web services de JSON

List ARRAY: ( { assets = ( { identity = 34DL3611; systemId = 544507; }, { identity = 34GF0512; systemId = 5290211; }, { identity = 34HH1734; systemId = 111463609; }, { identity = 34HH1736; systemId = 111463622; }, { identity = 34YCJ15; systemId = 294151155; } ); identity = DEMO; systemId = 4921244; }) 

Al usar este código:

 NSArray *list =[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; NSLog(@"Response data: %@", responseString); NSLog(@"List ARRAY: %@", list); NSDictionary *dict = [list objectAtIndex: 0]; NSMutableArray *vehicleGroups = [dict objectForKey:@"identity"]; NSLog(@"Vehicle Groups: %@", vehicleGroups); 

Aquí está el código del selector que estoy usando:

  -(NSInteger)numberOfComponentsInPickerView:(UIPickerView *)pickerView{ return 1;} - (NSInteger)pickerView:(UIPickerView *)pickerView numberOfRowsInComponent :(NSInteger)component { return [vehicleGroups count];} -(NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{return nil;} -(void)pickerView:(UIPickerView *)pickerView didSelectRow:(NSInteger)row inComponent:(NSInteger)component{ } 

La aplicación se bloquea en la línea

 return [vehicleGroups count]; 

delegate method numberOfRowsInComponent of pickerView . No estoy recibiendo eso, ¿por qué me enfrento a este problema?

//Código////

  NSArray *list =[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; NSLog(@"Response data: %@", responseString); NSLog(@"List ARRAY: %@", list); NSDictionary *dict = [list objectAtIndex: 0]; vehicleList = [dict objectForKey: @"assets"]; self.vehicleGroups = [[NSMutableArray alloc] init]; vehicleGroups = [dict objectForKey:@"identity"]; NSLog(@"Vehicle Groups: %@", vehicleGroups); NSString *identity = [dict objectForKey: @"identity"]; NSString *systemid = [dict objectForKey:@"systemId"]; self.listVehicles = [[NSMutableArray alloc] init]; self.listVehiclesID =[[NSMutableArray alloc]init]; NSLog(@"GroupOfVehicles: %@", groupOfVehicles); for (NSUInteger index = 0; index < [vehicleList count]; index++) { itemDict = [vehicleList objectAtIndex: index]; [self.listVehicles addObject:[itemDict objectForKey:@"identity"]]; [self.listVehiclesID addObject:[itemDict objectForKey:@"systemId"]]; } NSLog(@"Group Name: %@", identity); NSLog(@"Assets: %@", listVehicles); NSLog(@"Assets System ID: %@", listVehiclesID); NSLog(@"GroupSystemID: %@", systemid); 

Primero debe inicializar su matriz.

 NSDict *list =[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; NSLog(@"List Dict: %@", list); NSMutableArray *temp = list[@"assets"]; NSMutableArray *vehicleGroups = [NSMutableArry array]; vehicleGroups = temp[0][@"identity"]; NSLog(@"Vehicle Groups: %@", vehicleGroups); 

Responder a mi propia pregunta guía a los demás si se enfrentan al mismo problema. En realidad, lo que he hecho aquí para get la matriz requerida para la identidad: DEMO es la siguiente:

 vehicleGroups =[NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:&error]; NSLog(@"Response data: %@", responseString); NSLog(@"List ARRAY: %@", vehicleGroups); NSDictionary *dict1 = [vehicleGroups objectAtIndex: 0]; NSString *identity1 = [dict objectForKey: @"identity"]; NSLog(@"dictNEW: %@", dict1); groupOfVehicles = [[NSMutableArray alloc] init]; for (NSUInteger index = 0; index < [vehicleGroups count]; index++) { itemDict = [vehicleGroups objectAtIndex: index]; [groupOfVehicles addObject:[itemDict objectForKey:@"identity"]]; } NSLog(@"Group Name NEW: %@", identity1); NSLog(@"Groups NEW: %@", groupOfVehicles); 

Después de usar ese código, obtuve la matriz correctamente para mis datos requeridos.

retiene la matriz como

[vehicleGroups retain] después de vehicleGroups = [dict objectForKey:@"identity"];

 NSDictionary *dicts = [list objectAtIndex: 0]; NSMutableArray *vehicleGroups = [[NSMutableArray alloc] init]; for (NSDictionary *dict in dicts) { NSString* identity = [dict objectForKey:@"identity"]; [vehicleGroups addObject:identity]; } NSLog("count is %d",[vehicleGroups count]); 

testinglo 🙂

Sus datos JSON no son JSON .

 { "assets" : [ { "identity" : "34DL3611", "systemId" : 544507 }, .... { "identity" = "34YCJ15", "systemId" = 294151155 } ], "identity" = "DEMO", "systemId" = 4921244 } 

Este es un posible ejemplo de datos que se describió en JSON.

 NSDictionary *dict = [list objectAtIndex: 0]; NSMutableArray *vehicleGroups = [dict objectForKey:@"identity"]; 

Me parece a dict aquí hay un dictionary con tres inputs: activos, identidad y systemId. En este nivel, el valor de identidad es solo una cadena, "DEMO", pero estás intentando asignarlo a una matriz mutable. Creo que quieres algo así:

 NSDictionary *dict = [list objectAtIndex: 0]; NSArray *assets = [dict objectForKey:@"assets"]; NSArray *vehicleGroups = [assets objectForKey:@"identity"]; 

(Está bien enviar -objectForKey: a una matriz – obtienes una matriz de objects correspondiente a la key dada para cada object en el receptor).