'NSRangeException',原因:'*** -[__NSArrayM objectAtIndex:]:索引 1 超出范围 [0 .. 0]'

'NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'

在我的应用程序中,当我向其他用户发送附件(如图像和视频)时随机出现此错误,它崩溃了。

我正在使用 Quickblox SDK。

这是错误..

NSRangeException', reason: '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]

        2016-04-26 10:22:50.510 Sample-VideoChat[1027:12093] *** Terminating  app due to uncaught exception 'NSRangeException', reason:     '*** -[__NSArrayM objectAtIndex:]: index 1 beyond bounds [0 .. 0]'

  enter code here
  - (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView
 {
     NSLog(@"self.chatSections....%@",self.chatSections);
     return [self.chatSections count];
 }


 - (UICollectionViewCell *)collectionView:(QMChatCollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath
   {

    QBChatMessage *messageItem = [self messageForIndexPath:indexPath];

      NSRange textRange =[messageItem.text rangeOfString:@"https://api.quickblox.com/blobs/"];

     Class class = [self viewClassForItem:messageItem];
    NSString *itemIdentifier = [class cellReuseIdentifier];

     QMChatCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:itemIdentifier forIndexPath:indexPath];
cell.avatarView.tag = 0;

  if ((messageItem.attachments.count != 0) && textRange.location != NSNotFound) 
{

       QBChatAttachment* attachment = [[QBChatAttachment alloc] init];
         attachment.ID = @"3565772";
         attachment.url = messageItem.text;
         attachment.type = @"image";

         [cell.avatarView setImageWithURL:[NSURL URLWithString:attachment.url] placeholder:nil options:SDWebImageContinueInBackground progress:^(NSInteger receivedSize, NSInteger expectedSize)
     {
     } completedBlock:^(UIImage *image, NSError *error, SDImageCacheType cacheType, NSURL *imageURL)
     {
         cell.avatarView.tag = 4592;
     }];
}

cell.transform = self.collectionView.transform;

UITapGestureRecognizer *singleTapGestureRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(singleTap:)];
singleTapGestureRecognizer.numberOfTapsRequired = 1;
singleTapGestureRecognizer.enabled = YES;

[self collectionView:collectionView configureCell:cell forIndexPath:indexPath];

return cell;
   }

 - (QBChatMessage *)messageForIndexPath:(NSIndexPath *)indexPath {
         if (indexPath.item == NSNotFound) {
          // If the update item's index path has an "item" value of NSNotFound, it means it was a section update, not an individual item.
        return nil;
     }

      QMChatSection *currentSection = self.chatSections[indexPath.section];
     return currentSection.messages[indexPath.item];
     }

尝试添加一个全异常断点(Add Exception Breakpoint)来调试异常发生的地方。这确实意味着您正在尝试访问不在数组索引中的对象。

找出导致问题的最佳方法是在应用程序崩溃之前引发所有异常。

试试这个:

if (item != nil && item.count != 0) {
    QMChatSection *currentSection = self.chatSections[indexPath.section];
    return currentSection.messages[indexPath.item];
}

你可以这样检查,在尝试访问索引之前检查值

  if (self.chatSections.count > 0) {
        QMChatSection *currentSection = self.chatSections[indexPath.section];
        if (currentSection.messages.count > 0){
            return currentSection.messages[indexPath.item];
        }else {
            return nil;
        }
    } else {
        return nil;
    }

如果您使用 Quickblox 创建自己的代码,您可以参考他们的演示实现,因为对我来说它工作正常

静态单元格, 我遇到过同样的问题。所以,我只是替换了 tableView 内容类型

"Static cell" 到 "Dynamic prototypes"。