iOS : Einfügen von mehreren Zeilen in UITableview mit insertRowsAtIndexPaths
Habe ich schon 10 Zeilen in TableView, Was ich versuche zu tun, ist das hinzufügen eines weiteren 10 Zeilen, ich bin mit insertRowsAtIndexPaths aber ich bin immer Fehler.
Folgenden ist der code, den ich verwende
-(void)insertDownloadedActions:(NSMutableArray *)dataToAdd
{
__weak CurrentViewController *weakSelf = self;
int64_t delayInSeconds = 2.0;
dispatch_time_t popTime = dispatch_time(DISPATCH_TIME_NOW, delayInSeconds * NSEC_PER_SEC);
dispatch_after(popTime, dispatch_get_main_queue(), ^(void){
[weakSelf.tableView beginUpdates];
[weakSelf.dataSource addObjects:dataToAdd];
NSIndexPath *newIndexPath = [NSIndexPath indexPathForRow:[weakSelf.dataSource count]-dataToAdd.count-1 inSection:0];
[weakSelf.tableView insertRowsAtIndexPaths:@[newIndexPath] withRowAnimation:UITableViewRowAnimationTop];
[weakSelf.tableView endUpdates];
});
}
Aber ich erhalte folgenden Fehler für das
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0. The number of rows contained in an existing section after the update (20) must be equal to the number of rows contained in that section before the update (10), plus or minus the number of rows inserted or deleted from that section (1 inserted, 0 deleted) and plus or minus the number of rows moved into or out of that section (0 moved in, 0 moved out).
Sie sind nur das hinzufügen einer Zeile, nicht 10
Wenn Sie die Zeile einzufügen, erhöhen Sie die Anzahl der Zeilen in der section zur gleichen Zeit.
Wenn Sie immer das von der Datenquelle und hinzufügen von Elementen zu der Datenquelle, dann wird dieser automatisch aufgenommen. Das problem ist, dass er nur das einfügen eines Elements in seine Tabelle anstelle der 10 extra, er ist das hinzufügen der Datenquelle.
kann ich die code in der cellForRowAtIndexPath ?
Danke @Abizern Problem war, dass nur aber jetzt habe ich es gelöst 🙂
Wenn Sie die Zeile einzufügen, erhöhen Sie die Anzahl der Zeilen in der section zur gleichen Zeit.
Wenn Sie immer das von der Datenquelle und hinzufügen von Elementen zu der Datenquelle, dann wird dieser automatisch aufgenommen. Das problem ist, dass er nur das einfügen eines Elements in seine Tabelle anstelle der 10 extra, er ist das hinzufügen der Datenquelle.
kann ich die code in der cellForRowAtIndexPath ?
Danke @Abizern Problem war, dass nur aber jetzt habe ich es gelöst 🙂
InformationsquelleAutor Abhishek | 2014-01-08
Du musst angemeldet sein, um einen Kommentar abzugeben.
Code ist nah, aber die Tabelle, Ansicht muss aktualisiert werden, mit index-Pfade in genaue übereinstimmung mit dem, was in der datasource.
Du willst ein weakSelf zu vermeiden-Zyklus, bei dem die block-Inhaber behält den block und den block (durch die Verwendung der block-Inhaber "selbst") behält der Besitzer. Es gibt keine Notwendigkeit für die weakSelf Muster hier seit der view-controller wird nicht beibehalten einer Kopie der versandt blockiert.
Siehe den unteren Absatz der Antwort.
Ok also was ich verstanden sollte ich verwenden __schwach nur, wenn ich über die Blöcke rechts ?
Nur, wenn sich der block bezieht sich auf die Besitzer. Dieser block bezieht sich auf sich selbst (eines view-controller vermutlich), der nicht der eigene block. Der block in dispatch_after werden, die im Besitz von GCD, nicht der vc, wo der code angezeigt wird.
Vielen Dank, Es hat geklappt, mit nur geringfügigen änderungen, die ich in Benutzung hatte NSInteger currentCount = selbst.dataSource.count; statt NSInteger currentCount = dataToAdd.count; und jetzt habe ich verstanden, dieses Konzept nochmals vielen Dank, Und eine Sache, die actully diese Funktion wird aufgerufen, aus einem block, ich denke, das ist, warum __schwach ist erforderlich
InformationsquelleAutor danh
Den
insertRowsAtIndexPaths:withRowAnimation:
UND die änderungen an Ihren Daten Modell beide auftreten müssen, um in-zwischenbeginUpdates
undendUpates
Habe ich ein einfaches Beispiel, das sollte sich auf seine eigenen. Ich verbrachte eine Woche hantieren zu versuchen, dies herauszufinden, da konnte ich nicht finden keine einfachen Beispielen, so dass ich hoffe, das spart jemand Zeit und Kopfschmerzen!
Freien code, nicht klopfen.
InformationsquelleAutor jungledev
Swift, fügen Sie mehrere Zeilen, die Wir tun können,
Hier bin ich nun einsetzen, um
indexPath:0
wie ich Sie Anhängen möchten, die Liste zu scrollen. (Umgekehrte Paginierung)InformationsquelleAutor ceekay
Ich bin nicht sicher, aber Versuch einfach kann dies sein, es wird Ihr problem lösen, kann dies das problem sein, dass Sie das hinzufügen von Daten nach dem Aufruf beginnen-updates. So einfach aktualisieren Sie die Datenquelle, bevor Sie beginnen-updates.
das ist falsch. Die Daten Hinzugefügt werden müssen, die in-zwischen beginUpdates und endUpdates
Recht hat er, finden Sie auf der offiziellen doc: developer.apple.com/library/ios/documentation/UserExperience/...
InformationsquelleAutor Sandeep Kolankar