滚动表格

时间:2015-07-17 14:49:22

标签: objective-c uitableview core-data asynchronous uiimageview

我是移动开发的新手。在我的应用程序中,我有一个表格,显示用户创建的食谱。单元格被设计为具有图像(异步加载)和2个标签的nib文件。在模拟器上一切似乎都可以。但即使在实现异步加载图像之后,滚动表格在真实设备上看起来也很糟糕。 使用时间分析器时,大部分时间都被主函数占用。所以我在想是否这可能是由于使用核心数据造成的。我不确定这个。 如果有人能帮我解决这个问题,我将不胜感激。

这实际上是我用数据填充我的单元格的方式:

-(UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString *identifier = @"TableCell";
    SimpleTableViewCell *cell = (SimpleTableViewCell *)[self.tableView dequeueReusableCellWithIdentifier:identifier];

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

    Receipe *cellRecipe = [self.fetchedResultsController objectAtIndexPath:indexPath];

    cell.recipeName.text = cellRecipe.name;
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *path = [documentsDirectory stringByAppendingPathComponent:cellRecipe.image];

    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        UIImage *image = [UIImage imageWithContentsOfFile:path];
        dispatch_async(dispatch_get_main_queue(), ^{
            [cell.recipeImage setImage:image];
        });
    });

    cell.recipeDetails.text = cellRecipe.ingredients;

    UIImage *favourite;
    if ([cellRecipe.isFavourite boolValue] == YES) {
        favourite = [UIImage imageNamed:@"liked.png"];
    }

    [cell.recipeIsFavouriteButton setImage:favourite forState:UIControlStateNormal];
    favourite = nil;

    return cell;
}

1 个答案:

答案 0 :(得分:1)

使用

[tableView dequeueReusableCellWithReuseIdentifier:identifier forIndexPath:indexPath];

而不是

[tableView dequeueReusableCellWithIdentifier:identifier];
  

我认为不需要异步加载,使用正常加载。