当我向上和向下滚动时,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 :(得分: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];
当然,假设您在加载数据后没有更改单元格的内容。