2016-04-26 7 views
1

In meiner Anwendung kommt dieser Fehler zufällig, wenn ich Anhang (wie Bild und Video) an andere sende Benutzer stürzt ab.'NSRangeException', Grund: '*** - [__ NSArrayM objectAtIndex:]: Index 1 über Grenzen [0 .. 0]'

Ich verwende Quickblox SDK.

Dies ist der Fehler ..

NSRangeException 'Grund:' *** - [__ NSArrayM objectAtIndex]: Index 1 jenseits Grenzen [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]; 
    } 
+0

Fügen Sie einen Code hinzu, um diesen Fehler zu beheben. @ Preeti patel –

+0

Sie können den Code unterhalb des Fehlers finden. – PPreeti

+0

Versuchen Sie, einen Ausnahmeblockpunkt (Add Exception Breakpoint) hinzuzufügen, um zu debuggen, wo die Ausnahme auftritt. Es bedeutet, dass Sie versuchen, auf ein Objekt zuzugreifen, das nicht im Arrayindex enthalten ist. –

Antwort

10

Versuchen Sie, einen Ausnahmeblockpoint (Exception Breakpoint hinzufügen) hinzuzufügen, um zu debuggen, wo die Ausnahme auftritt. Es bedeutet, dass Sie versuchen, auf ein Objekt zuzugreifen, das nicht im Arrayindex enthalten ist.

Am besten zu finden, was das Problem verursacht, ist, alle Ausnahmen auszulösen, bevor App abstürzt.

enter image description here i

0

versuchen Sie dies:

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

verwenden. Es funktioniert nicht für mich. – PPreeti

+1

@preetipatel Bitte überprüfen Sie Ihre Methode (Anzahl der Artikel in der Sammlungsansicht). ich denke, Sie haben die Anzahl der Artikel mit unterschiedlichen Array-Anzahl erstellt, die Sie in der Zelle für Artikel –

0

Sie überprüfen, wie dies zu machen, für den Wert überprüfen, bevor Sie den Index zuzugreifen versuchen,

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; 
    } 

Wenn Sie erstellen Ihre eigenen Code mit Quickblox können Sie ihre Demo-Implementierung beziehen, wie für mich funktioniert es

+0

verwenden Dieser Code funktioniert nicht für mich, zeigt den gleichen Fehler. – PPreeti

+0

@preetipatel ok, verwenden Sie die QuickBlox-Beispieldemo oder haben Sie Ihre neue Demo erstellt, wenn Sie dieselbe verwenden, geben Sie bitte den Link an, damit wir den Code selbst einchecken können – HardikDG

+0

Ich habe meine eigene mit Hilfe der Beispieldemo erstellt – PPreeti