2013-05-29 61 views
0

我試圖使用下面的代碼使用NSJSONSerialization輸出一些數據。如何使用NSJSONSerialization輸出數據?

此日誌語句工作NSLog(@"publicData: %@", publicData); 但後來當我試圖獲得字典的「描述」崩潰NSLog(@"data: %@", [dict objectForKey:@"description"]);

我的錯誤信息:unrecognized selector sent to instance. Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFDictionary objectAtIndex:]: unrecognized selector sent to instance...'

我已經包括了NSLog輸出。

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL 
                  URLWithString:@"http://******.com/api/feed"]]; 

NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 

NSError *jsonParsingError = nil; 
NSArray *publicData = [NSJSONSerialization JSONObjectWithData:response options:0 error:&jsonParsingError]; 

NSLog(@"data from publicData: %@", publicData); 
NSDictionary *dict; 

for(int i=0; i<[publicData count];i++) 
{ 
    dict= [publicData objectAtIndex:i]; 
    NSLog(@"data: %@", [dict objectForKey:@"description"]); 

} 


publicData: { 
data =  (
      { 
     address =    { 
    address = "street address"; 
      city = cityname; 
      lat = "42.000237034667"; 
      lng = "12.492805660226"; 
      province = provincename; 
     }; 
     "category_id" = 20; 
     description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"; 
     id = 1; 
     slug = "title-in-en"; 
     title = "title in En"; 
    }, 
      { 
     address =    { 
      address = "street address"; 
      city = cityname; 
      lat = "42.000237034667"; 
      lng = "12.492805660226"; 
      province = provincename; 
     }; 
     "category_id" = 20; 
     description = "Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum"; 
     id = 5; 
     slug = "title-in-en"; 
     title = "title in En"; 
    }, 

感謝您的幫助

+0

在你的情況下,'publicData'是一個NSDictionary,其中只有一個對象用於鍵「data」,而不是數組。使用'objectForKey'訪問'NSDictionary',而不是'objectAtIndex'。 –

+0

@MarcusAdams我以爲我是這麼做的。凡「字典」是字典和publicData是nsarray。那是不正確的?謝謝! NSDictionary * dict; (int i = 0; i <[publicData count]; i ++) dict = [publicData objectAtIndex:i]; NSLog(@「data:%@」,[dict objectForKey:@「description」]); } – hanumanDev

回答

1

優化我一點點的代碼由codeplasma提供,它看起來像這樣:

NSDictionary *publicData = [NSJSONSerialization JSONObjectWithData:response 
                   options:0    
                    error:&jsonParsingError]; 
    NSArray *objects = [publicData objectForKey:@"data"]; 
    for(NSDictionary *element in objects) { 
     NSLog(@"the description is %@",[element objectForKey:@"description"]); 
    } 

您的公開數據是NSDictionary n ot NSArray

+0

謝謝,但我得到一個NSArray沒有方法'objectForKey'的錯誤。 – hanumanDev

+0

@hanumanDev你可以在沒有NSLog的情況下發布完整的JOSN結構,也許可以從你的borwser :) – danypata

+0

我剛纔編輯了我的問題並添加了瀏覽器的輸出。謝謝您的幫助! – hanumanDev

0

我不知道這是否會工作,但你應該嘗試用它來取代你的循環:

for(int i=0; i<[[publicData objectForKey:@"data"] count];i++) 
{ 
    dict= [[publicData objectForKey:@"data"] objectAtIndex:i]; 
    NSLog(@"data: %@", [dict objectForKey:@"description"]); 

} 
相關問題