异步下载UITableView时出现问题
||
我正在尝试异步下载UITableViewCell的图像,但是当前它正在为每个单元格设置相同的图像。
请您告诉我代码的问题:
- (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];
}
SearchObject *so = (SearchObject *)[_tableData objectAtIndex:indexPath.row];
cell.textLabel.text = [[[[so tweet] stringByReplacingOccurrencesOfString:@\""\" withString:@\"\\\"\"] stringByReplacingOccurrencesOfString:@\"<\" withString:@\"<\"] stringByReplacingOccurrencesOfString:@\">\" withString:@\">\"];
cell.detailTextLabel.text = [so fromUser];
if (cell.imageView.image == nil) {
NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:[so userProfileImageURL]]];
NSURLConnection *conn = [NSURLConnection connectionWithRequest:req delegate:self];
[conn start];
}
if ([_cellImages count] > indexPath.row) {
cell.imageView.image = [UIImage imageWithData:[_cellImages objectAtIndex:indexPath.row]];
}
return cell;
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[_cellData appendData:data];
[_cellImages addObject:_cellData];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
[self.tableView reloadData];
}
没有找到相关结果
已邀请:
2 个回复
夏瓤跋棘
不一定会按照连接启动的顺序被调用,
每次连接可被调用零次或多次(并且如果您的图像超过几千字节,则可能会被调用) ,并且不能保证依次对表中的每个单元格调用
。所有这些都将完全破坏您的
阵列。 为此,您需要为每个连接拥有一个单独的NSMutableData实例,并且需要将其仅一次添加到
数组中,并以该行的正确索引添加,而不是将其添加到任意的下一个可用索引。然后在ѭ1中,您需要找出要附加到的正确NSMutableData实例;可以通过使用连接对象(使用
包装在NSValue中)作为NSMutableDictionary中的键,或使用
将数据对象附加到连接对象来完成,或者通过使自己成为一个类来处理所有NSURLConnection为您服务,并在完成时将您交给数据对象。
响摔衅幸
方法中,您只是将图像数据附加到数组中;您应该以一种可以将其链接到应该显示在其上的单元格的方式来存储图像数据。一种方法是使用填充有一堆
的
,然后替换
连接完成加载后,在适当的索引处的值。 另外,当连接尚未完成加载时,您要将
附加到
数组中,因此只能在
方法中执行此操作。