Парсинг в Твиттере: -[__NSCFString objectForKey:]
Я исправил ошибку, с которой сталкивались некоторые из моих пользователей, когда мое приложение загружало JSON из Twitter:
-[__NSCFString objectForKey:] unrecognized selector
После исследования я считаю, что проблема была в результате использования NSDictionary вместо NSArray. Мой вопрос, однако, почему некоторые пользователи с ТОЧНЫМ устройством и версией iOS периодически сталкиваются с ошибкой? Почему бы не ошибиться каждый раз для всех или никогда? Связано ли это с используемой на устройстве памятью или с прерыванием получения данных с сервера?
РЕДАКТИРОВАТЬ:
//I have since changed statuses to an NSArray
NSDictionary *statuses = [[NSDictionary alloc] init];
statuses = [output JSONValue];
for (NSDictionary *status in statuses)
{
Tweets *aTweet = [[Tweets alloc] init];
//error began (fatal error) on following line
aTweet.text = [status objectForKey:@"text"];
aTweet.created_at = [status objectForKey:@"created_at"];
aTweet.created_date = [dateImporter dateFromString:aTweet.created_at];
[self.tweets addObject:aTweet];
aTweet = nil;
}
2 ответа
Это зависит от того, где данные в output
идет от. Вы предполагаете, что ваши данные JSON являются массивом словарей, но возможно, что сервер возвращает что-то еще, например, если произошла ошибка, сервер может вернуть словарь с некоторой информацией об ошибке.
Вам нужно будет взглянуть на API Twitter, чтобы увидеть, какие данные вы можете получить для этого конкретного вызова.
https://dev.twitter.com/docs/error-codes-responses
Взглянув на страницу выше, вы можете использовать HTTP-код возврата, чтобы увидеть, не прошел ли запрос, и если это так, вы можете просто прервать эту операцию.
Я думаю, что программное обеспечение одно и то же, но данные разные.
Посмотрите, сможете ли вы узнать, какой ключ запрашивается.
Вы, вероятно, обнаружите, что у некоторых записей json есть массив с этим ключом (возможно, когда существует более одного отношения), а у некоторых есть словарь (для отношения с одним объектом).
Я не могу думать нигде в твиттер-API, где это так, но это понятно.