Парсинг в Твиттере: -[__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, где это так, но это понятно.

Другие вопросы по тегам