加载UITableViewCell的问题

时间:2014-06-22 21:21:27

标签: ios objective-c uitableview

使用UITableViewCell将GIF加载到我的SDWebImage。它实际上非常快,但tableview似乎在用户实际滚动tableview之前不会加载。

有关如何解决此问题的任何建议?

这是我的UITableView

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
return self.gifArray.count;
}

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

RDGifGridTableViewCell *cell = (RDGifGridTableViewCell *)[tableView     dequeueReusableCellWithIdentifier:MyIdentifier];

if (cell == nil)
{
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"RDGifGridTableViewCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];
}

cell.urlLabel.text = [self.gifArray objectAtIndex:indexPath.row];
cell.urlLabel.textColor = [UIColor clearColor];

[cell.imageView sd_setImageWithURL:[NSURL URLWithString:cell.urlLabel.text] placeholderImage:nil options:SDWebImageCacheMemoryOnly];

return cell;
}

这是我向viewDidLoad中出现的数组添加内容的方法:

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString]];

NSOperationQueue *queue = [[NSOperationQueue alloc] init];
[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response, NSData *data, NSError *connectionError) {
        NSDictionary *json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
            NSArray *idArray = [json objectForKey:@"data"];
                for (NSDictionary *ids in idArray) {

                    NSDictionary *images = ids[@"images"];
                    NSDictionary *fixedHeightImage = images[@"fixed_width"];
                    self.gifURL = fixedHeightImage[@"url"];
                    [self.gifArray addObject:self.gifURL];
                    [self.tableView reloadData];
                }

1 个答案:

答案 0 :(得分:1)

以下行可能是问题

static NSString *MyIdentifier = @"Cell";

当您的单元格被重用时,您使用的是另一个cellIdentfier RDGifGridTableViewCell

应该重复使用相同的单元格。

所以,只需修复此行并再次使用该变量,以避免出现此类错误,哦,当您考虑到这一点时,请考虑将您的变量重命名为首字母小写myIdentifier为目标C命名惯例表明。

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

RDGifGridTableViewCell *cell = (RDGifGridTableViewCell *)[tableView dequeueReusableCellWithIdentifier:MyIdentifier];

if (cell == nil)
{
    NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"RDGifGridTableViewCell" owner:self options:nil];
    cell = [nib objectAtIndex:0];
}

cell.urlLabel.text = [self.gifArray objectAtIndex:indexPath.row];
cell.urlLabel.textColor = [UIColor clearColor];

[cell.imageView sd_setImageWithURL:[NSURL URLWithString:cell.urlLabel.text] placeholderImage:nil options:SDWebImageCacheMemoryOnly];

return cell;
}