2012-06-04 4 views
0

Мне нужно Подсчитайте число элементов (почта) в этом ответ JSON,счетных Xcode JSON элементов

2012-06-04 14:09:57.872 horitable[72261:11903] JSON : { 
posts =  (
      { 
     post =    { 
      eventdate = "2012-03-31"; 
      eventid = 2; 
      eventimage = "http://hernandoz.local/~hernandoz/kopict/02_31march2012.jpg"; 
      eventinfo = "02 event"; 
      eventname = "xplosion 02"; 
     }; 
    }, 
      { 
     post =    { 
      eventdate = "2012-07-07"; 
      eventid = 3; 
      eventimage = "http://hernandoz.local/~hernandoz/kopict/greg_vs_turner.jpg"; 
      eventinfo = "02 event"; 
      eventname = "Xplosion 02"; 
     }; 
    }, 
      { 
     post =    { 
      eventdate = "2012-04-29"; 
      eventid = 4; 
      eventimage = "http://hernandoz.local/~hernandoz/kopict/ko_itclub_apr_2012.jpg"; 
      eventinfo = "KO East London Interclub"; 
      eventname = "KO Interclub"; 
     }; 
    } 
); 

}

Я знаю, что есть только три события (запись), это код Я использую

[[AFNetworkActivityIndicatorManager sharedManager] decrementActivityCount]; 
    NSLog(@"JSON : %@", JSON); //get the JSON response 

    // 6.1 - Load JSON into internal variable 
    jsonResponse = JSON; 
    // 6.2 - Get the number of shows (post) 
    int shows = 0; 
    for (NSDictionary* day in jsonResponse) { 
     shows += [[day objectForKey:@"posts"] count]; 

     NSLog(@"count : %d",shows); 
    } 

У меня есть ошибка, но я не понимаю, почему.

-[__NSCFString objectForKey:]: unrecognized selector sent to instance 0x76986f0 

Может кто-то, пожалуйста, помогите мне. Благодаря

+0

Просто хотел убедиться, что и должным образом выделены NSDictionary –

+0

jsonResponse не NSArray и JSON является ID – HernandoZ

ответ

0

Проблема была JSON в качестве идентификатора, это работает

jsonResponse = [(NSDictionary*)JSON objectForKey:@"posts"];

0

в вашем случае вы можете сделать это

[[AFNetworkActivityIndicatorManager sharedManager] decrementActivityCount]; 
NSLog(@"JSON : %@", JSON); //get the JSON response 

// 6.1 - Load JSON into internal variable 
jsonResponse = JSON; 
// 6.2 - Get the number of shows (post) 
int shows = [[jsonResponse objectForKey:@"posts"] count]; 

    NSLog(@"count : %d",shows); 
+0

Я получаю сообщение об ошибке - Нет видимый @interface для NSarray объявляет селектор 'objectforkey' – HernandoZ

+0

objectForKey not objectforkey – iArezki

+0

Да, это было так, как я набрал ошибку, но это objectForKey в Xcode – HernandoZ

0

Вы должны сначала раздробить, как JSON

NSDictionary * dict = [JSON JSONValue]; 

или

NSDictionary * dict = [JSON JSONFragmentValue]; 

затем

for (NSDictionary* day in dict) { 
    shows += [[day objectForKey:@"posts"] count]; 

    NSLog(@"count : %d",shows); 
} 
+0

Что это такое JSONValue – HernandoZ

+0

Это функция библиотеки JSon, которая преобразует json-данные в словарь или массив. – Saad

+0

Я не использую какую-либо внешнюю библиотеку Json .. – HernandoZ

1

попробовать это

NSLog(@"Response members= %@",responseString); 
NSArray *array = [(NSDictionary*)[responseString JSONValue] objectForKey:@"posts"]; 
NSLog(@"Count value= %d",[array count]);  
+0

Привет, я что такое JSONValue?Я не использую какие-либо внешние библиотеки, только AFNetworking..thanks – HernandoZ

+0

- это не решение, но оно указывает на правильное направление – HernandoZ

0

Я думаю, что вы mistakely ставить "сообщения" вместо "пост". Ключевые «сообщения» содержат массив словаря, и каждый словарь имеет ключ «сообщение». Что вы делаете, так это взятие всех словарей из массива в строках

for (NSDictionary* day in jsonResponse) { 

и проверьте ключевые слова «посты» в словаре. Действительно, в словаре нет ключа под названием «posts». Я «пост». И значение для «post» - это NSDictionary, а не массив. Так что вы не можете позвонить count. Решение для вашей проблемы, это удалить не-необходимость API-интерфейсы внутри для цикла

[[AFNetworkActivityIndicatorManager sharedManager] decrementActivityCount]; 
    jsonResponse = JSON; 

    int shows = 0; 
    for (NSDictionary* day in jsonResponse) { 
     shows += 1; 
    } 

    NSLog(@"count : %d",shows); 
Смежные вопросы