我从网络上获取数据。在ViewDidLoad方法中,我初始化并保留我的数组:
arrBannersIMG = [[NSMutableArray alloc]init];
[arrBannersIMG retain];
在CellForRowAtIndexPath中我需要检查arrBannersImg[indexPath.row]
是否存在,如果是,则从该数组中设置cell.image,如果不存在 - 通过Internet数据初始化UIImage,并将此图像添加到arrBannersIMG。我试过这个:
if (_arrayOfImages[indexPath.row] == [NSNull null]) {
//
}
但我在这一行上有错误:
由于未捕获的异常'NSRangeException'而终止应用程序,原因: ' * - [__ NSArrayM objectAtIndex:]:索引0超出范围为空 阵'
我可以检查这样的数组:
if (!array || !array.count){
...
}
但我需要检查当前元素,而不是所有数组。我怎么能这样做?
答案 0 :(得分:1)
你应该改变你的方法并利用一些开源代码。您不希望真正使用稀疏填充的数组(快速滚动可能会导致问题)。您还希望确保在后台下载图像。
查看使用SDWebImage
并仅存储阵列中的所有图像URL。现在,当您需要显示图像时,只需将URL传递给SDWebImage
,它将根据您的需要从缓存/互联网加载。
答案 1 :(得分:0)
我不确定为什么要在空数组中查找元素但要解决此错误,请尝试:
if(array.count > indexPath.row) {
if (_arrayOfImages[indexPath.row] == [NSNull null]) {
// ...
}
}
希望这会有所帮助。
答案 2 :(得分:0)
首先,我建议您根据自己的情况使用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这样的委托方法访问它,这种数组实现会因崩溃而拯救我们。
希望它有所帮助。如果我们必须采用其他解决方案,请检查并告知我们。