2016-07-19 6 views
0

Ich habe ein großes Problem mit einigem I-Code, den ich in Swift konvertiert habe. Wenn self.tableView.endUpdates() Ansicht meines Tisches Aufruf bleibt leer und ich erhalte die folgenden Fehler:Assertionsfehler in - [UITableView _endCellAnimationsWithContext:] beim Konvertieren von Objective-C in Swift

Assertion failure in -[UITableView _endCellAnimationsWithContext:], /BuildRoot/Library/Caches/com.apple.xbs/Sources/UIKit_Sim/UIKit-3512.60.7/UITableView.m:1501 

Seltsam genug, wenn der gleiche Code in Objective-C geschrieben wurde dieser Fehler nicht bis angezeigt wird.

Die Tabellenansicht Datenquelle und Delegate sind immer noch in Objective-C und werden von vielen anderen View-Controllern im Projekt verwendet. Hier

ist der Code in Objective-C:

self.dataSource.itemArray = [self.userList copy]; 
NSMutableArray *indexPaths = [NSMutableArray new]; 

for (NSUInteger i = (offset); i < (end); i++) { 
    NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0]; 
    [indexPaths addObject:indexPath]; 
} 

[self.tableView beginUpdates]; 
[self.tableView insertRowsAtIndexPaths:[indexPaths copy] 
         withRowAnimation:UITableViewRowAnimationFade]; 
[self.tableView endUpdates]; 

Und dies ist der gleiche Code, aber dann in swift:

self.dataSource.itemArray = self.userList.copy() as! [User] 
var indexPaths = [NSIndexPath]() 
for i in offset...end { 
    let indexPath = NSIndexPath(forRow: i, inSection: 0) 
    indexPaths.append(indexPath) 
} 
self.tableView.beginUpdates() 
self.tableView.insertRowsAtIndexPaths(indexPaths, withRowAnimation: .Fade) 
self.tableView.endUpdates() 

Die tableView:numberOfRowsInSection: korrekt aufgerufen wird, und gibt das gleiche in beiden Fällen . Auch die Zelle ist korrekt registriert.

Gibt es ein bekanntes Problem, oder ist nur, dass ich eine Objective-C-Basisklasse in Swift nicht erweitern kann.

Antwort

1

In diesem Stück Code:

for i in offset...end { 
    let indexPath = NSIndexPath(forRow: i, inSection: 0) 
    indexPaths.append(indexPath) 
} 

Die letzten indexPath die NSIndexPath(forRow: end, inSection: 0) ist hinzugefügt werden, das bedeutet, dass Sie eine zusätzliche Zeile in Ihre Tabellenansicht Hinzufügen werden, die voraussichtlich nicht.

Wahrscheinlich möchten Sie Ihre Schleife ändern:

for i in offset..<end { 
    let indexPath = NSIndexPath(forRow: i, inSection: 0) 
    indexPaths.append(indexPath) 
} 
+1

Üblicher ist es zu schreiben: 'für i in offset .. fiks

+0

Das könnte ein Problem sein, aber wenn ich einen' NSFecthedResultsController' benutze, bekomme ich immer noch das gleiche Problem, obwohl ich es benutze Objective-C-Klasse, die in Objective-C-Version funktioniert. – rckoenes

+0

@rckoenes Haben Sie das Problem behoben, auf das ich hinwies und immer noch denselben Fehler erhalte? – njuri

0

In meinem Fall

myTableView.reloadSections([sectionIndex], with: .none)

Arbeit tat und entfernt den Fehler. Das kann daran liegen, dass eine Schaltfläche oder ein Textfeld-Tag nach dem Löschen der Zeile einen falschen Index erhält.

Verwandte Themen