2012-03-04 99 views
1

我想在這裏學習本教程http://ios-blog.co.uk/iphone-development-tutorials/parsing-json-on-ios-with-asihttprequest-and-sbjson/在同一時間做兩件事的ASIHttp和SBJSon教程的時候,一切都很好,直到行無法識別選擇使用sbjson

NSMutableArray *colorTitles = [jsonDictionary objectForKey:@"title"]; 

哪裏會與崩潰錯誤

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

我一直在使用的NSArray,NSString的嘗試和正在運行的想法......我的代碼exavtly與鏈接

回答

1

這可能發生在您嘗試調用不屬於相應類的方法或它超類然後在這種情況下您會收到錯誤:unrecognized selector sent to instance

所以請檢查你得到的是什麼JSON。 根據JSON響應(數據)嘗試解析它。

我想告訴你的JSON:

JSON is built on two structures:

A collection of name/value pairs. In various languages, this is realized as an object, record, struct, dictionary, hash table, keyed list, or associative array. 
An ordered list of values. In most languages, this is realized as an array, vector, list, or sequence. 

在JSON,他們採取這些形式:

對象

的對象一組無名的名稱/值對。一個對象以{(左大括號)開始並以}(右大括號)結束。每個名稱後跟:(冒號),名稱/值對由(逗號)分隔。

陣列:

數組是值的有序集合。數組以[(左括號)開始,以[]結尾(右括號)。值由(逗號)分隔。

值可以是在雙引號的字符串或數字,或真或假或爲空,或物體或陣列。這些結構可以嵌套。

我認爲你得到的值是JSON,所以請在下面嘗試。有一件事你不能分配(創建對象)字面值爲NSmutableArray。所以請用下面的方式做。

NSArray *colorTitles = [jsonDictionary valueForKey:@"title"]; 

如果仍然沒有得到正確的結果。

http://www.json.org/

+0

對不起,格式跑了,但它的東西,是的,我把它改爲nsarray,但仍然是相同的結果與錯誤 – eddy 2012-03-04 06:18:06

+0

對不起粘貼不相關的JSON,但JSON是作爲http://www.colourlovers.com/api/colors?format=json作爲即時通訊做教程 – eddy 2012-03-04 06:22:00

+0

,我認爲JSON結構是一個對象數組? – eddy 2012-03-04 06:24:38

0

相同是NSDictionary的方法,而不是NSArray。您可能在JSON字符串解析中缺少(或過度)一個步驟。

+0

我已經按照該網站上完全相同的步驟,難道說我分配objectForKey類型是錯誤的?如果是的話,什麼應該是正確的類型? – eddy 2012-03-04 05:21:17

+0

@eddy請看你是否正在向NSMutableArray litrally賦值,這是不正確的,在這一點崩潰mayoccur.and第二件事你需要檢查你的JSON響應(你得到的值,數組,對象)。在你的代碼你調用[jsonDictionary objectForKey:@「title」];。你可能會得到值而不是Object。因此,請檢查您的回覆 – Kamarshad 2012-03-04 06:11:50

0

通常,當您試圖訪問一個dealloc'd對象時會出現這種錯誤。檢查你是否過度釋放或不保留jsonDictionary

+0

我是否通過保留'jsonDictionary來做到這一點,這意味着我需要使用@property(retain)在.h文件中聲明它?或者我得到錯誤的想法:( – eddy 2012-03-04 05:20:26

+0

不需要去.h文件,只檢查你是否在這行之前沒有釋放對象,如果你用相同的方法聲明變量,這應該工作。你的代碼爲這個方法嗎? – Sailesh 2012-03-04 05:25:07

+0

@Sailesh這不是真的,當你試圖訪問在對應類(或它的子類)中不存在的方法時,這個錯誤會出現。 – Kamarshad 2012-03-04 05:42:04