2017-05-11 1 views
0

Ich habe dieses Problem mit meiner App bekommen und bin mir nicht sicher, was schief gelaufen ist. Fatal Exception: NSInternalInconsistencyException Zelle fehlt für neu sichtbare Zeile 78UITableView Fehlende Zelle für die neu sichtbare Zeile NSInternalInconsistencyException

Hier ist der Stack-Trace:

Fatal Exception: NSInternalInconsistencyException 
0 CoreFoundation     0x191bbefd8 __exceptionPreprocess 
1 libobjc.A.dylib    0x190620538 objc_exception_throw 
2 CoreFoundation     0x191bbeeac +[NSException raise:format:] 
3 Foundation      0x192656710 -[NSAssertionHandler handleFailureInMethod:object:file:lineNumber:description:] 
4 UIKit       0x198022b3c __46-[UITableView _updateWithItems:updateSupport:]_block_invoke.1049 
5 UIKit       0x197d234b8 +[UIView(UIViewAnimationWithBlocks) _setupAnimationWithDuration:delay:view:options:factory:animations:start:animationStateGenerator:completion:] 
6 UIKit       0x197d39bac +[UIView(UIViewAnimationWithBlocks) animateWithDuration:delay:options:animations:completion:] 
7 UIKit       0x197ee8770 -[UITableView _updateWithItems:updateSupport:] 
8 UIKit       0x197eccfbc -[UITableView _endCellAnimationsWithContext:] 
9 MyApp      0x1000ed518 -[UICommentsTableViewController insertNewComment:atLocation:] (UICommentsTableViewController.m:1228) 
10 MyApp      0x1000e99e8 -[UICommentsTableViewController onCommentsReceivedWithMessage:] (UICommentsTableViewController.m:881) 
11 MyApp      0x1000e9094 -[UICommentsTableViewController processWSMessage:] (UICommentsTableViewController.m:803) 
12 MyApp      0x1000e8f84 -[UICommentsTableViewController webSocket:didReceiveMessage:] (UICommentsTableViewController.m:788) 
13 MyApp      0x10009ea30 __30-[SRWebSocket _handleMessage:]_block_invoke (SRWebSocket.m:837) 
14 libdispatch.dylib    0x190a769e0 _dispatch_call_block_and_release 
15 libdispatch.dylib    0x190a769a0 _dispatch_client_callout 
16 libdispatch.dylib    0x190a7b5e8 _dispatch_main_queue_callback_4CF 
17 CoreFoundation     0x191b6d0c0 __CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE__ 
18 CoreFoundation     0x191b6acdc __CFRunLoopRun 
19 CoreFoundation     0x191a9ad94 CFRunLoopRunSpecific 
20 GraphicsServices    0x193504074 GSEventRunModal 
21 UIKit       0x197d53130 UIApplicationMain 
22 MyApp      0x10011ba40 main (main.m:7) 
23 libdyld.dylib     0x190aa959c start 

Der Fehler hier geschieht:

- (void)insertNewComment:(NSIndexSet *)indexSet atLocation:(NSInteger)location{ 

    [self.tableView beginUpdates]; 

    NSMutableArray *indexArray = [NSMutableArray new]; 
    if (!indexSet) { 
     [indexArray addObject:[NSIndexPath indexPathForRow:location inSection:0]]; 
    } else { 
     [indexSet enumerateIndexesUsingBlock:^(NSUInteger index, BOOL *stop) { 
      [indexArray addObject:[NSIndexPath indexPathForRow:index inSection:0]]; 
     }]; 
    } 

    [self.tableView insertRowsAtIndexPaths:indexArray withRowAnimation:UITableViewRowAnimationBottom]; 
    [self.tableView endUpdates]; 

} 

I Automatisches Layout für die Zelle bin mit, aber ich habe die Höhe manuell berechnet und sie entsprechend ihrer Geräteausrichtung zwischengespeichert.

Höhe Rechner:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 


    Comment* comment = self.comments[indexPath.row]; 

    CGFloat cellHeight = [self getHeightForLayoutMode:self.screenMode forCommentID:comment.commentID]; 

    if(cellHeight > 0) { 

     return cellHeight; 
    } 


    if([comment isType2]) { 
     [self setHeightForLayoutMode:self.screenMode forCommentID:comment.commentID height:106]; 
     return 106; 
    } 

    CGFloat width = tableView.bounds.size.width - 100; 

    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle defaultParagraphStyle] mutableCopy]; 
    paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping; 


    NSDictionary *attributes = @{NSFontAttributeName: [UIFont fontWithName:@"MyFont" size:11.0f], NSParagraphStyleAttributeName:paragraphStyle}; 

    CGRect rect = [comment.message boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX) 
               options:NSStringDrawingUsesLineFragmentOrigin 
              attributes:attributes 
               context:nil]; 

    CGFloat height = 31+ceilf(rect.size.height); 

    [self setHeightForLayoutMode:self.streamViewController.screenMode forCommentID:comment.commentID height:height]; 

    return height; 
} 

Jemand hatte ein Problem wie dieses (Crash with Missing cell for newly visible row when updating UITableView), und sie estimatedSectionHeaderHeight nur entfernt, aber ich habe nicht estimatedSectionHeaderHeight auf meinen Code.

Antwort

0

Dieser Fehler tritt auf, wenn beim Einfügen des Werts die Anzahl der Abschnitte außerhalb des zulässigen Bereichs liegt. Es ist kein Höhenproblem.

+0

hmm, das ist seltsam, weil ich nur 1 Abschnitt habe. [indexArray addObject: [NSIndexPath indexPathForRow: Position inSection: 0]]; – ordinaryman09

+0

Auch ich legte ein Protokoll vor dem Absturz und das ist, was ich sehe: \t beginnen einfügenNewComment Speicherort ist: 773, Kommentar Anzahl ist 774 so die self.comments.count ist 774, und ich bin am Index 773 einfügen Obwohl die Abstürze auf allen Geräten auftreten, tritt der größte Teil des Absturzes (85%) innerhalb von iPhone 5, 5s, SE auf. – ordinaryman09

0

Ich habe die Ursache des Problems herausgefunden.

In meinem View-Controller habe ich eine Textansicht, mit der die Tastatur angezeigt wird. Ich hatte das UITableView nach unten gepinnt. Ich stelle es auf scrollToBottom auf der Tastatur einWillShow & passen Sie die Einfügung an, wenn sich die Textansichtshöhe ändert. Sobald die Tastatur angezeigt wurde, war die Tabellenansicht kaum sichtbar (besonders auf dem iPhone 5).

nun das Update I ist der Tableview ist unten nach oben des Textview-Abonnenten, die gleiche Höhe & Sichtbarkeit des Tableview zu halten, und ich brauche nicht die scrollToBottom & mehr nach innen versetzt Einstellung, da die automatischen Layout davon kümmert . Hoffe es hilft jemandem!

Prost.

Verwandte Themen