2012-11-08 126 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的第一「塊」。