解析json并在网格视图中显示

时间:2011-08-03 12:58:22

标签: iphone objective-c xcode json

我正在解析一个json url并在网格视图中显示它。模拟器中的输出看起来像一个类似于imagepicker的图像网格。按下它导航到一个新视图的图像...代码工作很好,我可以在单击图像时在控制台中接收数据。问题是我无法导航到下一个视图..你们帮帮我了吗

- (void)viewDidLoad {
    [super viewDidLoad];
    jsonurl=[NSURL URLWithString:@"http://www.1040communications.net/sheeba/stepheni/iphone/stephen.json"];
    jsonData=[[NSString alloc]initWithContentsOfURL:jsonurl];
    jsonArray = [jsonData JSONValue]; 
    items = [jsonArray objectForKey:@"items"];
    //  NSLog(@"hello:%@",items);
    story = [[NSMutableArray array]retain];
    media1 = [[NSMutableArray array]retain];

    for (NSDictionary *item in items )
    {
        [story addObject:[item objectForKey:@"title"]];
        [media1 addObject:[item objectForKey:@"media"]];    
    }

    UIScrollView *view = [[UIScrollView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    int row = 0;
    int column = 0;
    for(int i = 0; i < media1.count; i++) {
        NSString *mel=[media1 objectAtIndex:i];
        NSString *escapedURL = [mel stringByAddingPercentEscapesUsingEncoding:NSASCIIStringEncoding];
        UIImage *thumb = [[UIImage alloc]initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:escapedURL]]];
        button = [UIButton buttonWithType:UIButtonTypeCustom];
        button.frame = CGRectMake(column*100+24, row*80+10, 64, 64);
        [button setImage:thumb forState:UIControlStateNormal];
        [button addTarget:self 
                   action:@selector(buttonClicked:) 
         forControlEvents:UIControlEventTouchUpInside];
        button.tag = i; 
        [view addSubview:button];

        if (column == 2) {
            column = 0;
            row++;
        } else {
            column++;
        }
    }

    [view setContentSize:CGSizeMake(320, (row+1) * 80 + 10)];
    self.view = view;
    [view release];
}

- (IBAction)buttonClicked:(id)sender
{
    UIImage *boy = [story objectAtIndex:button.tag];
    Detailview *detailview=[[Detailview alloc]init];
    [detailview initWithItem:boy];
    self.detailviewController=detailview;
    [self.navigationController pushViewController:self.detailviewController animated:YES];
}

enter image description here

2 个答案:

答案 0 :(得分:2)

在buttonClicked中尝试此操作:

UIImage *boy = [story objectAtIndex:sender.tag];

您想要sender的标记,而不是button。创建按钮时,button被设置为列表中的最后一个。 sender是导致此事件的ui对象。

答案 1 :(得分:1)

嗨看起来像你使用旧的JSON解析器。 json有一个更好的解析器。

那是JSONKIT

它只有2个文件(.h和.m),只需2行代码就可以获得与密钥对应的任何数据。你不必遍历你的items数组。你的性能率肯定会使用JSONKit。如果你试着使用这个让我,我可以使用jsonkit发布示例代码来解析json内容。

其次,对于您遇到的问题,您将图像放在UIScrollview中。你的uiscrollview没有将navigationcontrol推送到下一个视图。要么删除滚动视图并从rootviewcontroller推送,要么将navigationcontroller添加到uiscrollview。猜猜那是概率。试试吧。

一切顺利。