2012-03-04 5 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 буквально. так что делайте это ниже Manner.

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

Если вы по-прежнему не получили надлежащего результата.

http://www.json.org/

+0

uh извините, формат сработал, но это что-то вроде этого, и да, я изменил его на nsarray, но все тот же результат с ошибкой – eddy

+0

извините, вставив нерелевантный json, но json - это как http://www.colourlovers.com/api/colors?format=json, поскольку я делаю учебник – eddy

+0

, и я думаю, что json-структура имеет массив объектов? – eddy

0

objectForKey - это метод NSDictionary, а не NSArray. Вероятно, вам недостает (или переусердствует) шаг в разборе строк JSON.

+0

Я следовал точно шаги на этом сайте, это может быть тот тип, который я расПредеЛение objectForKey неправильно? если да, то какой должен быть правильный тип? – eddy

+0

@eddy, пожалуйста, смотрите, что вы освещаете какое-то значение в NSMutableArray буквально, что неправильно, в этом случае может произойти сбой mayoccur.and во-вторых, вам нужно проверить свой ответ JSON (что вы получаете значения, массив, объект). В вашем коде вы вызываете [jsonDictionary objectForKey: @ "title"]; возможно, вы получаете значения вместо Object. SO проверите свой ответ – Kamarshad

0

Обычно такая ошибка возникает, когда вы пытаетесь получить доступ к объекту dealloc'd. Убедитесь, что вы перевыпускаете или не сохраняете jsonDictionary.

+0

Мне нужно сделать это, сохранив 'jsonDictionary, это будет означать, что мне нужно объявить его в файле .h с помощью свойства @property (сохранить)? или я получаю неправильную идею :( – eddy

+0

Не нужно переходить в файл .h. Только убедитесь, что вы не освобождаете объект до этой строки. Если вы объявили переменную в том же методе, это должно сработать. ваш код для этого метода? – Sailesh

+0

@Sailesh это не так, этот eror приходит, когда вы пытаетесь получить доступ к методу, которого нет в соответствующем классе (или его подклассе). – Kamarshad