2012-03-21 46 views
1

当我上下滚动时,UITableView只显示来自JSON数组的数据。当我加载表格视图时,它会显示单元格,但它们是空白的,当我上下滚动时,它会开始显示数据。当我向上和向下滚动时,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; 
} 
+0

哪里是你的代码? – Bourne 2012-03-21 16:28:04

回答

1

而是开始异步请求(非阻塞)

[request startAsynchronously]; 

尝试同步做(阻塞)

[request startSynchronously]; 
+0

其神奇完成! :)非常感谢它的工作..现在[requeststartSynchronously];已经制定出 – 2012-03-22 14:09:31

+0

我很高兴它帮助:) – Myxtic 2012-03-22 14:12:46

0

我也有类似的问题,并得到了我在苹果的开发者论坛回答前一阵子,这解决了我的问题:

从你所描述的东西,我会想这个问题是更有可能位于cellForRowAtIndexPath中,或者在您执行单元的实际配置时发生的位置,而不是您发布的代码中的位置。当你的dequeueReusableCellWithIdentifier返回一个现有的单元格时,像你这样的问题可能会发生,但是你不会完全重置它的现有状态。

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

+0

你能告诉我我如何重置它的状态? – 2012-03-21 19:05:10

+0

您必须更改单元格中的每一位信息。假设你有一个标题,一个副标题和一个'accessoryType.UITableViewCellAccessoryCheckmark',因此对于你绘制的每个单元格,你必须修改这三个单元格,即使其中一个单元格对于所有单元格都是相同的,你只需重写它。 – 2012-03-22 09:31:12

+0

但在我的情况下,我从json获取NSArray,并且每个单元格中都有两个文本字段,如文本标签和详细文本。 – 2012-03-22 13:21:28

0

这些问题通常是由UITableView的缓存造成的,即从队列具有相同CellIdentifier他提供缓存的UITableViewCell(你的情况 - @“细胞”)。

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

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

那当然,假设下你不改变你的细胞加载数据后的内容。

+0

我做了,但没有运气,当我加载表视图显示空白,并作为滚动它开始显示我的价值观,如果我再次上去它开始显示我其余的人,我加载它异步。请推荐一些东西 – 2012-03-21 20:58:27

+0

当我向下滚动显示数值的statrd时,它会加载空白。 – 2012-03-21 20:59:19

2

当您完成您的请求,您设置的阵列,请确保调用[self.tableView reloadData];

性能和动画的目的,表视图不刷新自己的数据源改变时。

相关问题