UITableView Reordering mit Datenbank

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • UITableView Reordering mit Datenbank

    Hallöchen.

    Ich hab mal wieder ein Problem, habe aber gerade den Code nicht zur Hand, aber das Problem möchte ich trotzdem schon einmal beschreiben:
    Ich habe einen UITableView mit Daten aus einer Remote Datenbank. Also Datenbank Row als UITableViewCell immer. Jetzt ist ein Feature für den Herren Kunden aufgekommen, der ein Reordeing der Daten in der Datenbank braucht. So, ich hätte von Anfang an ein Reordering drin, funktionierte aber ab und an nicht. Deswegen hab ich das erstmal „verschwiegen“. Jetzt ist's aber benötigt und ich komme um eine richtige Implementation nicht herum.
    Ziel ist es, per Drag&Drop die Cells anzuordnen. Ist UI-technisch natürlich kein Problem. Das Problem ist die Datenbank.. Ich nutze eine PHP Schnittstelle, die ich modifizieren darf. Momentan ist es so gelöst: die On-Drag-Delegate-Methode schickt dem Server die IDs von beiden Cells, der tauscht die auch in der Datenbank. So weit so gut. Die Log sagt mir aber, dass diese On-Drag-Methode (genauen Namen nicht im Kopf, habe eine Subclass von GitHub für Hold-to-Reordering genommen), nicht nur einmal aufgerufen wird während einem Drag sondern ganz oft. Ich vermute, dass es daran liegt, dass so oft getauscht wird, dass der Server die Cells nicht schnell genug getauscht bekommt.

    Also mein Problem ist, dass die Cells in der Datenbank nachher reinstes Chaos sind. Es stellt sich nun die Frage, wie ich genau am performantesten getauscht bekomme. Es passt mir gar nicht so wirklich, es wie bei einem andern Teil zu machen: Alle Cells löschen und neu (in der UITableView Reihenfolge) reinschreiben bei jedem On-Drag-Aufruf. Das funktionier sauber, aber ist auch sehr intensiv und die API ist bei meinem Problemteil auch nicht dazu ausgelegt, dann alles zu löschen und neu einzufügen.

    Was meint ihr, was man da am besten macht?
  • Das wäre auch meine Idee, allerdings weiß ich nicht, wie ich aus den ganzen Aufrufen den letzten herausbekomme.

    Aktuell nutze ich die Methode

    Quellcode

    1. - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)fromIndexPath toIndexPath:(NSIndexPath *)toIndexPath


    Ich habe mal diese Methode implementiert, sie wird aber nie aufgerufen:

    Quellcode

    1. - (NSIndexPath *)tableView:(UITableView *)tableView targetIndexPathForMoveFromRowAtIndexPath:(NSIndexPath *)sourceIndexPath toProposedIndexPath:(NSIndexPath *)proposedDestinationIndexPath


    Ich benutze diese Klasse für das Reordering:
    github.com/shusta/ReorderingTa…rderTableViewController.h
  • Habe festgestellt, dass bei Apples normalem Edit-Mode (Reorder) nur einmal die moveRow aufgerufen wird.
    Ich werde also die Standard Methode von Apple verwenden, dafür gibt's halt kein Tap&Hold Reordering…