2013-01-24 30 views
0

這是我使用得到的字符串通過SBJson解析未來代碼:我的代碼拋出異常無法識別的選擇發送

NSMutableArray *abc=[jsonData valueForKey:@"items"]; 

NSString *imgStr=(NSString *)[abc valueForKey:@"image"]; 
NSLog(@"%@",imgStr); 

這裏ABC是NSMutableArray

,並拋出的異常是

> -[__NSArrayI stringByReplacingOccurrencesOfString:withString:]: unrecognized selector sent to instance 
+0

顯示您的JSON請。並添加一個'NSLog(@「%@」,abc);'line並在崩潰前顯示它的輸出。我懷疑'abc'不是你認爲的那樣。 –

+0

這是我的CONSOL'中的abc的NSLog' 2013-01-24 16:14:06。535 Drase [1381:11303]( { gamepoint = 20; GID = 365; 圖像= 「iVBORw0KGgksjallajlasldjlasdjlasjljlajsdlajldal」; 級別= 1; 電影= 「」; 狀態=未決; UID = 13; } )'圖像很短,因爲它不是在評論 – Atul

回答

4

在第一行聲明abc是一個NSMutableArray

在第二行中,您嘗試以NSDictionary的身份訪問它。在你的情況(我在這裏猜測),我希望你有一個項目的數組,並且每個項目是一個帶有「圖像」鍵的字典。

所以讓你的第一個項目,你可以使用

NSDictionary* firstItem = [abc objectAtIndex:0]; 

然後你可以從該提取圖像:

的NSString * imgStr =(的NSString *)與firstItem valueForKey:@ 「形象」 ]。

NSString *imgStr = [abc objectForKey:@"image"]; 

見註釋從@Stig

+0

哦!我不知道你可以告訴我如何訪問NSMutableArray @HeWas – Atul

+0

@Atul,請參閱我的擴展答案 – foundry

+1

請不要使用'valueForKey:'建議。這是錯誤的方法。學習使用'objectForKey:'這是OP想要的方法。 –

0

你的代碼中有幾個問題:

  1. 對於NSArray的,valueForKey:返回另一個數組。它不會而不是返回一個NSString,不管你的演員。您需要獲取數組中第一個條目的引用,然後請撥打objectForKey:

  2. 您正在使用的NSKeyValueCoding方法valueForKey:這裏你可能打算使用的NSDictionary方法objectForKey:。對於字典來說,它們大致可以互換,但如果您使用objectForKey:,則您將很容易理解無法在陣列上調用objectForKey:的錯誤。 僅當您確實需要鍵值編碼語義時才使用valueForKey:

  3. 你差不多從不需要在Objective-C中投id。你只是以這種方式隱藏錯誤。 (在這個例子中,它可能會隱藏你的問題,但它肯定是醜陋的,不正確的(因爲你試圖將一個數組轉換成一個字符串),只是欺騙你認爲你有一個字符串,因爲演員沒有失敗)

你大概意思寫的是這樣的:

NSArray *abc = [jsonData valueForKey:@"items"]; 
NSDictionary *entry = [abc objectAtIndex:0];  
NSString *imgStr = [entry objectForKey:@"image"]; 
NSLog(@"%@", imgStr); 
相關問題