Метод экземпляра '-jsonValue' не найден (тип возврата по умолчанию - 'id')

У меня возникла проблема в следующем утверждении.

NSArray *feedsData = [strFeedsResponse JSONValue];
6 ответов

Если вы используете веб-сервис, укажите URL-адрес для этого.

попробуйте этот путь...

NSArray* latestentry = (NSDictionary*)[responseString JSONValue];


Я предполагаю, что strFeedsResponse является экземпляром NSString. В NSString нет такого метода, как JSONValue. Вам нужна NSString категория и добавьте туда метод JSONValue.

Вы можете использовать, например, SBJson библиотеку https://github.com/stig/json-framework/, которая содержит заголовок NSString + SBJson.h, который добавляет метод JSONValue для NSString.

Этот заголовок должен быть импортирован в исходный файл, где вы хотите использовать метод JSONValue:

#import NSString+SBJSON.h

Подробнее о категориях здесь: http://macdevelopertips.com/objective-c/objective-c-categories.html


Надеюсь, это поможет будущим искателям этой ошибки...

Причиной ошибки является то, что текущая версия SBJson, по-видимому, не содержит категорию NSString "NSString + SBJSON.h", на которую ссылается более ранний плакат. Таким образом, вы можете легко написать свой собственный или просто использовать класс SBJsonParser напрямую ( "адрес" - это просто NSString, содержащий что-то вроде "24 Elm Street, Yourtown, New Mexico" ):

NSString *esc_addr = [address stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSString *req = [NSString stringWithFormat:@"http://maps.google.com/maps/api/geocode/json?sensor=false&address=%@", esc_addr];
NSString *response = [NSString stringWithContentsOfURL: [NSURL URLWithString: req] encoding: NSUTF8StringEncoding error: NULL];
SBJsonParser *parser = [[SBJsonParser alloc] init];
NSDictionary *googleResponse = [parser objectWithString:response];

Ура!


Происходит одна из двух вещей:

  • strFeedsResponse не является ФАКТИЧЕСКИМ экземпляром NSString. Возможно, это значение null или оно было инициировано с неправильным значением. Вы можете добавить точку останова в свой код, чтобы проверить значение, которое хранится в strFeedsResponse, прежде чем вы вызываете JSONValue на нем.

  • Вы неправильно импортировали структуру JSON, которую используете в свой класс. Вам нужно добавить заголовок JSON в свой класс.


Эта ошибка обычно возникает, когда метод не найден. Это происходит потому, что функция JSONValue не найдена. Убедитесь, что вы включили файлы заголовков json, где вы вызываете эту функцию.


NSArray *feedsData = [[strFeedsResponse JSONValue] mutableCopy];

Используйте эту строку, это будет полезно для вас.

licensed under cc by-sa 3.0 with attribution.