0

UITableView当我开始滚动它时,我有一个崩溃。这UITableView是一个文章列表,每个单元格都有一个关联的标题和从新闻 API 中提取的图像。

如果在我的项目资产中没有来自 API 的图像,我有一个占位符图像和一个图像。

WebListViewController.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{

    WebListCell *cell = [tableView dequeueReusableCellWithIdentifier:@"WebListCell"];
    Feed *feedLocal = [headlinesArray objectAtIndex:indexPath.row];

    Images *imageLocal = [feedLocal.images objectAtIndex:0];
    NSString *imageURL = [NSString stringWithFormat:@"%@", imageLocal.url];
    NSLog(@"img url: %@", imageURL);

    __weak UITableViewCell *wcell = cell;
        [cell.imageView setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@", imageURL]]
                       placeholderImage:[UIImage imageNamed:@"background.png"]
                       completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {
                         if(image == nil) {
                         //realign your table view cell
                           [wcell.imageView setImage:[UIImage imageNamed:@"placeholder.png"]];
                                       //];
                                  }
                              }];
    return cell;
}

UITableView如果一篇文章没有从 API 返回的图像,当我开始向下滚动列表时崩溃,即使我希望它在这些情况下只使用我的资产中的图像 。

错误是 * 由于未捕获的异常 'NSRangeException' 导致应用程序终止,原因:'* -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'

谢谢您的帮助!将根据需要发布任何代码!

编辑:

Images *imageLocal = [feedLocal.images objectAtIndex:0];

...看起来这条线正在崩溃

此外,以下是用于测试的 API 资源管理器中空图像数组的 JSON 响应: 在此处输入图像描述

4

1 回答 1

2

根据错误消息,您可以推断 feedLocal.images 数组实际上是空的,并且您尝试在错误发生时获取数组中的第一个对象。

在获取数组的第一个对象之前,您可能需要先进行额外的检查:

if (feedLocal.images.count == 0) {
// do what you need to do if the array is empty, for example skip the loading of the imageView
}

例如:

if (feedLocal.images.count == 0) {
    [cell.imageView setImage:[UIImage imageNamed:@"placeholder.png"]];
}
else {
    Images *imageLocal = [feedLocal.images objectAtIndex:0];
    NSString *imageURL = [NSString stringWithFormat:@"%@", imageLocal.url];
    NSLog(@"img url: %@", imageURL);

    __weak UITableViewCell *wcell = cell;
    [cell.imageView setImageWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"%@", imageURL]]
                   placeholderImage:[UIImage imageNamed:@"background.png"]
                          completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType) {
                         if(image == nil) {
                         //realign your table view cell
                           [wcell.imageView setImage:[UIImage imageNamed:@"placeholder.png"]];
                                       //];
                                  }
                              }];
}
于 2013-07-04T00:11:28.437 回答