'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"。
在我的应用程序中,当我向其他用户发送附件(如图像和视频)时随机出现此错误,它崩溃了。
我正在使用 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"。