Обработка ответа JSON iOS 6

У меня есть служба REST, которая выдает результаты JSON, которые были проверены несколькими различными инструментами проверки и т. д. Я новичок в разработке iOS, но не в разработке в целом. У меня возникли проблемы с извлечением объектов/ответов/чего-либо из моего ответа от службы. Несмотря на все мои усилия, мои попытки не увенчались успехом.

Типичный ответ службы:

[
    {
        "prcID": 547,
        "prcName": "walls",
        "prcDescription": "hi-lo",
        "1prc": 270,
        "2prc": 282,
        "3prc": 312,
        "4prc": 348,
        "5prc": 354,
        "6prc": 360,
        "7prc": 366,
        "8prc": 372,
        "9prc": 384,
        "10prc": 432
    },
    {
        "prcID": 548,
        "prcName": "doors",
        "prcDescription": "hi-lo",
        "1prc": 270,
        "2prc": 282,
        "3prc": 312,
        "4prc": 348,
        "5prc": 354,
        "6prc": 360,
        "7prc": 366,
        "8prc": 372,
        "9prc": 384,
        "10prc": 432
    }
]

Код представляет собой смесь примера кода и собственных попыток заставить все работать:

- (void)fetchedData:(NSData *)responseData {
    //parse out the json data
    NSError* error;
    NSDictionary* json = [NSJSONSerialization JSONObjectWithData:responseData //1
                                                         options:kNilOptions
                                                           error:&error];


    NSMutableArray *myarray = [json.description mutableCopy];
    outPutText.text = [myarray mutableCopy];
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        NSData* data = [NSData dataWithContentsOfURL:
        [NSURL    URLWithString:@"someserviceurl"]];
        [self performSelectorOnMainThread:@selector(fetchedData:)
                               withObject:data waitUntilDone:YES];
    });
}

Этот код позволяет мне, по крайней мере, увидеть ответ от службы в TextView, но каждый раз, когда я пытаюсь углубиться в NSDictionary json, используя либо ObjectAtIndex, либо итерацию с использованием AllKeys, я получаю аналогичную ошибку, когда я пытаюсь использовать код ниже :

NSArray* somearray = [json objectForKey:@"prcName"];
NSLog(@"PriceName: %@", somearray);

Ошибка:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFArray objectForKey:]: unrecognized selector sent to instance 0x71944b0'

Любая помощь приветствуется.


person scodav    schedule 08.11.2012    source источник
comment
Я понимаю, что мой вопрос и код могут быть загадкой с очевидным упущением - я часами пытался найти и протолкнуть это, но я натыкаюсь на контрольно-пропускной пункт, который я просто не могу протолкнуть. Я ценю любое понимание или предложения, даже относительно части вопроса. Спасибо.   -  person scodav    schedule 08.11.2012


Ответы (1)


Как насчет этого?

NSString *firstName = [NSString stringWithFormat:
                       @"%@",
                       json[0][@"prcName"], nil];
NSLog(@"%@", firstname);

iOS6 отбрасывает ответ в массив, и я использовал [0] для выбора первого «блока» ответа JSON.

person sougonde    schedule 14.11.2012