【问题标题】:Check NSMutableArray element is exist检查 NSMutableArray 元素是否存在
【发布时间】:2014-02-24 13:22:53
【问题描述】:

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

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

【问题讨论】:

  • 你为什么不检查一下,if (array.length >= indexPath.row)
  • 你应该在viewDidLoad的数组中添加与section中行数相等的NSNull元素

标签: ios iphone objective-c null nsmutablearray


【解决方案1】:

您可能应该改变您的方法并利用一些开源代码。您真的不想使用人口稀少的数组(快速滚动可能会导致您出现问题)。您还需要确保在后台下载图片。

查看使用SDWebImage 并将所有图像 URL 存储在您的数组中。现在,当您需要显示图像时,只需将 URL 传递给SDWebImage,它将根据您的需要从缓存/互联网加载。

【讨论】:

    【解决方案2】:

    我不确定你为什么要在空数组中查看元素,但要解决此错误,请尝试:

    if(array.count > indexPath.row) {
        if (_arrayOfImages[indexPath.row] == [NSNull null]) {
            // ...
        }
    }
    

    希望这会有所帮助。

    【讨论】:

      【解决方案3】:

      首先,我建议您根据您的情况使用 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 这样的委托方法中访问这种数组实现,那么这种数组实现将通过崩溃来拯救我们。

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

      【讨论】:

        猜你喜欢
        • 2012-11-20
        • 2010-09-11
        • 2021-05-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多