2012-06-19 2 views
0

Я новичок в программировании на iOS. Я пытаюсь создать массив массивов из json для развертки вниз. Поэтому я хочу получить это: blogsList -> blogPosts -> postDetailView. Я потратил на это 2 дня, но у меня пока нет результатов. Помоги пожалуйста.Создание массива из json для создания развертки tableview

Вот мой JSON:

{ "blogs": [{"ID":8,"Title":"ringroads","Name":"utf8 coded name 
string","Logotype":"..\/images\/gup_logos\/ringroads_logo_mini.jpg","posts": 
[{"ID":38,"URLTitle":"remont_dorog_v_moskve","title":"utf8 coded title string","Desc":"utf8 coded description 
string","0":"","Preview":"remont_dorog_v_moskve.jpg","create_time":"2012-05-22 
17:40:11"}]},{"ID":9,"Title":"gormost","Name":"utf8 coded name 
string","Logotype":"..\/images\/gup_logos\/gormost_logo_mini.jpg","posts": 
[{"ID":35,"URLTitle":"rabochie_budni_uchastka_gormost__fontany","title":"utf8 coded 
title string","Desc":"utf8 coded description 
string.","0":"","Preview":"rabochie_budni_uchastka_gormost__fontany.jpg","create_time":"2012 
-05-18 10:17:32"}]},{"ID":10,"Title":"unecomoscow","Name":"utf8 coded name 
string","Logotype":"..\/images\/gup_logos\/unecomoscow_logo_mini.jpg","posts": 
[{"ID":52,"URLTitle":"documentooborot","title":"utf8 coded title string","Desc":"utf8 
coded description string.","0":"","Preview":"documentooborot.jpg","create_time":"2012- 
06-05 14:02:23"},{"ID":49,"URLTitle":"grebnoy_kanal","title":"utf8 coded title 
string","Desc":"utf8 coded description 
string.","0":"","Preview":"grebnoy_kanal.jpg","create_time":"2012-05-31 14:37:08"}, 
{"ID":46,"URLTitle":"itogi_ozp","title":"utf8 coded title string.","Desc":"utf8 coded 
description string.","0":"","Preview":"itogi_ozp.jpg","create_time":"2012-05-30 
10:13:11"}]}] } 

Вот мой код:

... 
- (void)connectionDidFinishLoading:(NSURLConnection *)connection { 
[connection release]; 

NSString *responseStringBlogs = [[NSString alloc] initWithData:responseDataBlogs encoding:NSUTF8StringEncoding]; 
self.responseDataBlogs = nil; 

NSDictionary *results = [responseStringBlogs JSONValue]; 
NSArray *blogs = [results objectForKey:@"blogs"]; 

int i; 

NSMutableDictionary *blogsDict = [[NSMutableDictionary alloc] init]; 

for(i = 0; i < [blogs count]; i++){ 
    NSDictionary *tmpBlog = [blogs objectAtIndex:i]; 
    NSString *blogName = [tmpBlog objectForKey:@"Name"]; 
    NSDictionary *blogPosts = [tmpBlog objectForKey:@"posts"]; 
    //NSDictionary *blog = [NSDictionary dictionaryWithObjectsAndKeys:blogName, @"blogName", blogPosts, @"posts", nil]; 

    NSMutableDictionary *blog = [[NSMutableDictionary alloc] init]; 
    [blog setObject:blogName forKey:@"blogName"]; 
    [blog setObject:blogPosts forKey:@"posts"]; 
    //[blog setObject:urlTitle forKey:@"urlTitle"]; 

    blogsDict = blog; 

    [arrayForTable addObject:blogsDict]; 
} 

NSLog(@"blogsArr == %@", arrayForTable); 

NSLog показывает массив словаря с ключом "название_блогом" и "должность". Затем я использую метод cellForRowAtIndexPath:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ 
... 
NSDictionary *dict = [arrayForTable objectAtIndex:indexPath.row]; 
cell.textLabel.text = [dict objectForKey:@"blogName"]; 
} 

Это дает мне список blogNames в моем первом Tableview. Затем я использую метод didSelectRowAtIndexPath:

Но здесь я не могу получить postsTitle, чтобы показывать список сообщений в следующей таблице. Когда пользователь выбирает блог. Что я делаю неправильно? Пожалуйста, помогите мне!

Обновление: Я думаю, что словарь с сообщениями создает как массив и не имеет ключей, которые мне нужны («desc», «title» и т. Д.). Я не вижу ошибок в коде для этого предложения.

ответ

0

Вы должны вставить заголовок в словаре, как следующий

for(i = 0; i < [blogs count]; i++){ 
    NSDictionary *tmpBlog = [blogs objectAtIndex:i]; 
    NSString *blogName = [tmpBlog objectForKey:@"Name"]; 
    NSDictionary *blogPosts = [tmpBlog objectForKey:@"posts"]; 
    //Here get the post title too 
    NSString *postTitle = [tmpBlog objectForKey:@"Title"]; 
    //NSDictionary *blog = [NSDictionary dictionaryWithObjectsAndKeys:blogName, @"blogName", blogPosts, @"posts", nil]; 

    NSMutableDictionary *blog = [[NSMutableDictionary alloc] init]; 
    [blog setObject:blogName forKey:@"blogName"]; 
    [blog setObject:blogPosts forKey:@"posts"]; 
    //Set title in dictionary too 
    [blog setObject:postTitle forKey:@"postTitle"]; 
    //[blog setObject:urlTitle forKey:@"urlTitle"]; 

    blogsDict = blog; 

    [arrayForTable addObject:blogsDict]; 
} 

Теперь в вашем didSelectRowAtIndexPath получить пост титул как этот

- (void)tableView:(UITableView *)tableView didDeselectRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSDictionary *dict = [arrayForTable objectAtIndex:indexPath.row]; 
    //Get the post title 
    NSString *postTitle = [dict objectForKey:@"postTitle"]; 
} 
+0

Я пытался вставить postTitle раньше, но это дает ошибку: - [__ NSArrayM objectForKey:]: непризнанный селектор, отправленный в экземпляр 0x689a0d0. Теперь я просто делаю то же, что вы написали, - та же проблема. Я думаю, что есть некоторые ошибки, когда я создаю массив для uitable. – pash3r

+0

, в какой строке вы получаете сообщение об ошибке? –

+0

линий не выделяется. У меня есть сообщение в консоли только 2012-06-19 13: 00: 08.343 testBlogs [7426: f803] - [__ NSArrayM objectForKey:]: нераспознанный селектор отправлен в экземпляр 0x689a0d0 2012-06-19 13: 00: 08.344 testBlogs [7426: f803] *** Завершение приложения из-за неперехваченного исключения «NSInvalidArgumentException», причина: '- [__ NSArrayM objectForKey:]: непризнанный селектор, отправленный экземпляру 0x689a0d0' *** Первый стек вызовов броска: – pash3r

0

в стороне

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{ 

NSDictionary *dict = [arrayForTable objectAtIndex:indexPath.row]; 
NSString *blogName = [dict objectForKey:@"blogName"]; 

} 
+0

Это работает. Но мне нужно получить postsTitles из текущего блога. – pash3r

+0

Внутри didselectrowatindexpath NSArray * arrblogName = [dict objectForKey: @ "blogName"]; NSString * blogName = [arrblogName objectAtIndex: 2]; – Senthilkumar

+0

просто попробовал - это дает мне ошибку. Поскольку ключевое «blogName» имеет только имя блога. Поэтому я не могу получать сообщения от него. – pash3r