我从网络获取数据。在 ViewDidLoad 方法中,我初始化并保留我的数组:
arrBannersIMG = [[NSMutableArray alloc]init];
[arrBannersIMG retain];
在 CellForRowAtIndexPath 中,我需要检查是否存在arrBannersImg[indexPath.row]
,如果是 - 从这个数组中设置 cell.image,如果不是 - 通过来自互联网的数据初始化 UIImage,并将此图像添加到 arrBannersIMG。我试过这个:
if (_arrayOfImages[indexPath.row] == [NSNull null]) {
//
}
但是我在这一行有错误:
由于未捕获的异常"NSRangeException"而终止应用程序,原因: '* -[__NSArrayM 对象索引:]:索引 0 超出空的边界 阵列'
我可以像这样检查数组:
if (!array || !array.count){
...
}
但是我需要检查当前元素,而不是所有数组。我该怎么做?
您可能应该改变您的方法并利用一些开源代码。您不想真正使用稀疏填充的数组(快速滚动可能会导致问题)。您还需要确保在后台下载图像。
查看如何使用SDWebImage
并仅将所有图像 URL 存储在数组中。现在,当您需要显示图像时,只需将URL传递给SDWebImage
,它将根据需要从缓存/互联网加载。
我不确定为什么要在空数组中查看元素,但要解决此错误,请尝试:
if(array.count > indexPath.row) {
if (_arrayOfImages[indexPath.row] == [NSNull null]) {
// ...
}
}
希望这会有所帮助。
首先,我建议您根据自己的条件使用CellForRowAtIndexPath方法中的数组。
这是因为您的数组可能已经为空,并且您正在尝试将其与不存在的 indexpath.row 进行比较。这就是它坠毁的原因。
首先,您应该检查_arrayOfImages是否有任何计数。
_arrayOfImages=arrBannersIMG;
if([_arrayOfImages count]>0)
{
NSData *imgData = UIImageJPEGRepresentation([_arrayOfImages indexPath.row], 0);
UIImage *img = [UIImage imageWithData:[_arrayOfImages indexPath.row];
}
else
{
//init UIImage by data from Internet
arrBannersIMG= //Insert your image object in array
}
我不知道你的整个场景,但是如果我们从委托方法(如 CellForRowAtIndexPath)访问它,这种数组实现将使我们免于崩溃。
希望对您有所帮助。 请检查并让我知道我们是否必须采用其他解决方案。