获取json对象,然后分配给uitableview

时间:2012-09-08 10:11:05

标签: objective-c ios json uitableview

在我的应用程序中,我有一个tableview。我想要做的是: 通过Web获取数据,将它们存储在一个数组中,然后根据每个索引的值对应的行来获取背景。

我的意思是: 如果data [0] = red --->第0行的图像为红色,否则为绿色。

我已设法下载数据,但问题是首先分配了图像,然后发出http请求。

例如: 这是我获取数据并将它们存储到数组的代码:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
    NSLog(@"connectionDidFinishLoading");
    NSLog(@"Succeeded! Received %d bytes of data",[self.responseData length]);

    // convert to JSON
    NSError *myError = nil;
    NSDictionary *res = [NSJSONSerialization JSONObjectWithData:self.responseData options:NSJSONReadingMutableLeaves error:&myError];

    colours== [NSMutableArray array];


    NSString *parsed_data=[res objectForKey:@"data_1"];
    NSLog(@"getting colour : %@",parsed_data);
    [colours addObject:parsed_data];
    .....
    [self.mapMain reloadData];
}

其中mapMain是我的IBoutlet。 并设置背景:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *simpleTableIdentifier=@"SimpleTableCell";
    //this is the identifier of the custom cell
    SimpleTableCell *cell = (SimpleTableCell *)[tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil)
    {
        NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"SimpleTableCell" owner:self options:nil];
        cell = [nib objectAtIndex:0];
    }

    NSLog(@"Colour at %d is %@ ",indexPath.row,[colours objectAtIndex:indexPath.row]);


    if ([@"red" isEqualToString:[colours objectAtIndex:indexPath.row]]) {
        cell.mainImage.image = [UIImage imageNamed:[centersimages_red objectAtIndex:indexPath.row]];
    } else{
    cell.mainImage.image = [UIImage imageNamed:[centersimages_green objectAtIndex:indexPath.row]];
    }

    return cell;
}

其中centerimages是我的.pngs名称的表。

这是我的日志:

Colour at 0 is (null) 
Colour at 1 is (null)
....
didReceiveResponse
connectionDidFinishLoading
Succeeded! Received 287 bytes of data
getting colour for data : red 

所以它第一次将图像分配给单元格,然后执行请求。当然,我总是在else子句中看到图像。

我想先做数据提取然后分配图像。怎么做? 因为它是我的第一个ios应用程序,请完成答案或给我示例代码或提供教程链接。

编辑: 好的,我修复了错字错误。现在,当我尝试重新加载时,我收到了EXC_BAD_ACCESS错误。如果我取消注释重新加载数据,则此错误不会显示。 查看我编辑的代码。我的表视图与IBOutlet mainMap“连接”。

EDIT2: 错误出现在这一行:

 NSLog(@"Colour at %d is %@ ",indexPath.row,[colour objectAtIndex:indexPath.row]);

第二次(我的意思是因为重载数据而调用了cellForRowAtIndexPath)

错误是:EXC_BAD_ACCESS(代码1)。 也许数组发布或类似的东西?我应该检查什么?

1 个答案:

答案 0 :(得分:0)

执行所有操作,但在初始化后隐藏tableView:

tableView.alpha = 0;

然后在填充数组后的connectionDidFinishLoading:方法中,首先使用[tableView reloadData];重新加载tableView(再次调用cellForRowAtIndexPath),然后使用tableView.alpha = 1;显示tableView。

你也可以用动画淡入淡出tableView,但这是另一个问题。

如果您想知道,如何编写这样的JSON-Parsing-tableView-filling应用程序,请访问此链接:
http://mobile.tutsplus.com/tutorials/iphone/iphone-json-twitter-api/

顺便说一下:

这是什么:colours== [NSMutableArray array]; ???它必须像这样:

colours = [NSMutableArray array];. 

请注意 SINGLE EQUALS SIGN