JSON массив для просмотра выбора iPhone - PullRequest
2 голосов
/ 17 января 2012

Я получаю эти данные из веб-служб 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;
})

Используя этот код:

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);

Вот код выбора, который я использую:

    -(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{
 }

Приложение вылетает на линии

return [vehicleGroups count];

метод делегата numberOfRowsInComponent из pickerView.Я не понимаю, почему я сталкиваюсь с этой проблемой?

// Код ////

    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);

Ответы [ 6 ]

7 голосов
/ 17 января 2012

Вы должны сначала инициализировать ваш массив

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);
2 голосов
/ 18 января 2012

Отвечая на мой собственный вопрос, направьте других, если они столкнутся с той же проблемой, на самом деле то, что я сделал здесь, чтобы получить требуемый массив для идентификации: ДЕМО выглядит следующим образом:

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);

После использования этого кода я правильно получил массив для необходимых мне данных

0 голосов
/ 17 января 2012
NSDictionary *dict = [list objectAtIndex: 0];

NSMutableArray *vehicleGroups = [dict objectForKey:@"identity"];

Мне кажется, dict вот словарь с тремя записями: assets, identity и systemId. На этом уровне значением identity является просто строка «DEMO», но вы пытаетесь присвоить ее изменяемому массиву. Я думаю, что вы хотите что-то вроде этого:

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

(Можно отправлять -objectForKey: в массив - вы получаете массив объектов, соответствующий данному ключу для каждого объекта в приемнике.)

0 голосов
/ 17 января 2012

Ваши данные JSON не JSON .

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

Это возможный пример ваших данных, описанных в JSON.

0 голосов
/ 17 января 2012
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]);

попробуйте:)

0 голосов
/ 17 января 2012

сохранить массив как

[vehicleGroups retain] после vehicleGroups = [dict objectForKey:@"identity"];

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...