当我向上和向下滚动时,UITableView仅显示来自JSON的数据

时间:2012-03-21 16:25:01

标签: iphone ios uitableview

当我向上和向下滚动时,UITableView仅显示来自JSON数组的数据。当我加载表格视图时,它显示单元格,但它们是空白的,当我向上和向下滚动它然后开始显示数据。

如何在不滚动的情况下显示包含数据的单元格?

- (void)requestFinished:(ASIHTTPRequest *)request
{    
    if (request.responseStatusCode == 400) {
        NSLog( @"Code already used");

    } else if (request.responseStatusCode == 403) {
        NSLog( @"Code already used");

    } else if (request.responseStatusCode == 200) {
        NSLog(@"%@",[request responseString]);
        NSString *response = [request responseString];
        const char *convert = [response UTF8String];
        NSString *responseString = [NSString stringWithUTF8String:convert];
        responseArray  = [responseString JSONValue];
        Nrows = [responseArray count];

    }
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
    }

    NSDictionary *dict = [responseArray objectAtIndex:indexPath.row];
    cell.detailTextLabel.text = [dict objectForKey:@"allfeeds"];
    cell.textLabel.adjustsFontSizeToFitWidth = YES;
    cell.textLabel.font = [UIFont systemFontOfSize:12];
    cell.textLabel.minimumFontSize = 10;
    cell.textLabel.numberOfLines = 4;
    cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;
    cell.textLabel.text = [dict objectForKey:@"allfeeds2"];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;

    return cell;
}   

4 个答案:

答案 0 :(得分:2)

完成请求并设置阵列后,请务必致电[self.tableView reloadData];

出于性能和动画目的,当源更改时,表视图不会重新加载其数据。

答案 1 :(得分:1)

而不是异步启动请求(非阻塞)

[request startAsynchronously];

尝试同步(阻止)

[request startSynchronously];

答案 2 :(得分:0)

我有一个类似的问题,不久前在Apple的开发者论坛上得到了答案,这解决了我的问题:

  

根据你所描述的,我猜这个问题更可能出现在cellForRowAtIndexPath中,或者你在哪里进行单元格的实际配置,而不是你发布的代码。当dequeueReusableCellWithIdentifier为您提供现有单元格但您没有完全重置其现有状态时,可能会发生类似您的问题。

完整的问题和答案可以在这里找到(需要登录):https://devforums.apple.com/message/502483#502483

答案 3 :(得分:0)

这些问题通常是由UITableView缓存引起的,它使用相同的CellIdentifier(在你的情况下为@“Cell”)将其可用的缓存UITableViewCell出列。

尝试为表格的每个单元格创建一个单元格标识符。您可以使用NSIndexPath参数以下列方式创建此方差:

NSString* cellIdentifier = [NSString stringWithFormat:@"Cell%d",indexPath.row];

当然,假设您在加载数据后没有更改单元格的内容。