检查NSMutableArray元素是否存在

时间:2014-02-24 13:22:54

标签: ios iphone objective-c null nsmutablearray

我从网络上获取数据。在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){
  ...
}

但我需要检查当前元素,而不是所有数组。我怎么能这样做?

3 个答案:

答案 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这样的委托方法访问它,这种数组实现会因崩溃而拯救我们。

希望它有所帮助。如果我们必须采用其他解决方案,请检查并告知我们。