当Image的数组响应为null时,SDWebImage会使TableView崩溃

时间:2013-07-03 22:50:07

标签: ios objective-c uitableview sdwebimage

当我开始滚动它时,我有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;
}

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

错误是 *由于未捕获的异常终止应用' NSRangeException',原因:' * - [__ NSArrayM objectAtIndex:]:索引0超出空数组的范围& #39;

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

修改

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

......看起来就像撞在

上的那条线

此外,以下是用于测试的API资源管理器中空图像数组的JSON响应: enter image description here

1 个答案:

答案 0 :(得分: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"]];
                                       //];
                                  }
                              }];
}