2012-11-08 128 views
2

我有一个REST服务,可以产生JSON结果,并已通过多种不同的验证工具等验证。我对iOS开发相当陌生,但通常不是开发。我在从服务响应中提取对象/响应/任何内容时遇到了一些问题。尽管我尽了最大的努力,但我一直没有成功。JSON响应处理iOS 6

从服务的典型响应:

[ 
    { 
     "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]; 
    }); 
} 

此代码让我至少看到了但是每次我尝试使用ObjectAtIndex或迭代使用AllKeys钻入'json'NSDictionary时,我会遇到类似的错误,与我在尝试下面的代码时一样:

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

的错误是:

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

任何帮助表示赞赏。

+0

我意识到我的问题和代码可能会带有明显的疏漏 - 我已经尝试了几个小时来搜索并推动这个过程,但是我遇到了一个障碍,我似乎无法推开。我感谢任何见解或建议,甚至一部分问题。谢谢。 – scodav

回答

0

这个怎么样?

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

iOS6的连铸响应到一个数组,并且我用[0]选择响应JSON的第一“块”。