当我开始滚动它时,我有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响应:
答案 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"]];
//];
}
}];
}