Anzeige einer Meldung "Keine Zeilen gefunden" in UITableView mit Core Data

7

Ich habe eine iPhone App implementiert, die UITableViewController / UITableView und Core Data verwendet. Außerdem verwende ich einen NSFetchedResultsController, um die Tabellendaten zu verwalten. Das war alles sehr geradlinig und funktioniert super. Ich entschied dann, dass ich eine Nachricht in der UITableView anzeigen sollte, wenn keine Zeilen gefunden / abgerufen wurden. Nach der Untersuchung schien es, dass der beste Weg (vielleicht der einzige Weg) war, eine "Dummy" -Zelle, die die Nachricht enthält, zurückzugeben. Wenn ich das mache, bekomme ich aber ein Runzett aus dem Laufzeitsystem, das sich (und zu Recht) über Dateninkonsistenzen beklagt: "Ungültige Aktualisierung: ungültige Anzahl von Sektionen. Die Anzahl der Sektionen in der Tabellenansicht ...". Hier ist der relevante Code:

%Vor%

Ich habe Antworten von ähnlichen Fragen gelesen und es scheint, dass ich

verwenden sollte %Vor%

um die Nachrichtenzeile "dummy" in meine Tabelle einzufügen. Dies bedeutet jedoch auch das Entfernen der "Dummy" -Zeile, wenn eine echte Zeile eingefügt wird. Ich kann das tun, aber es scheint, als sollte es einen einfacheren Weg geben, dies zu erreichen. Alles, was ich tun möchte, ist eine Meldung anzuzeigen, dass keine Zeilen in der Tabelle vorhanden sind (einfach genug?). Meine Frage ist also: Gibt es eine Möglichkeit, eine Nachricht in einem UITableView anzuzeigen, ohne den Ansatz der "Dummy" -Zelle zu verwenden ODER gibt es eine Möglichkeit, UITableViewController / NSFetchResulsController davon zu überzeugen, dass dies nur eine "Dummy" -Zeile ist und sie nicht erhalten sollten so verärgert darüber, weil es keine richtige Zeile (aus meiner Sicht) in der Tabelle ist?

Jede Hilfe, die Sie zur Verfügung stellen können, wäre sehr willkommen (ich bin ein schwieriger Neuling für iPhone-Entwicklung und ich möchte die besten Praktiken lernen). Danke.

    
user1092808 01.09.2012, 21:00
quelle

4 Antworten

12

Anstatt mit der Datenquelle tableview zu hacken, um die beabsichtigte Benutzeroberfläche zu erhalten, sollten Sie stattdessen die Meldung "Keine Zeilen gefunden" zum Header der Tabellenansicht hinzufügen.

    
Rog 03.09.2012, 22:46
quelle
7

Ich habe das in viewDidLoad wie folgt gemacht.

%Vor%

In diesem Fall muss jedes TableViewCell-Objekt undurchsichtig sein, um das Label auszublenden. oder Sie müssen die ausgeblendete Eigenschaft des Labels entsprechend der Zeilenanzahl umschalten.

    
magpoc 10.04.2014 07:24
quelle
1

Mein einfacher Vorschlag, eine leere Nachricht anzuzeigen, besteht darin, Ihren Controller so einzurichten, dass er ein einfaches UIViewController (nicht UITableViewController ) ist.

Dieser UIViewController besteht aus einem UITableView (der Controller ist die Datenquelle und der Delegat für Ihre Tabelle) und von einem UILabel (oder einem UIView , der ein UILabel enthält), das die leere Zeile Nachricht.

Auf diese Weise können Sie die Sichtbarkeit der Tabelle und des Labels basierend auf den abgerufenen Zeilen steuern.

Dieser Ansatz könnte mühsam sein, aber ich denke, es ist gut, Hacking NSFetchResultsController und Datenquelle zu vermeiden. Darüber hinaus können Sie die Position Ihrer leeren Nachricht vollständig steuern.

Wie @Rog vorgeschlagen hat, könnten Sie auch den Tabellenansichtskopf verwenden, um diese Nachricht anzuzeigen. Wie Sie bevorzugen.

Ich hoffe, es hilft.

    
Lorenzo B 02.09.2012 10:10
quelle
1

Ein alternativer Ansatz, den ich zuvor verwendet habe, ist die Verwendung von Core Data, um das Update für Sie zu verwalten, indem Sie für den Abschnitt, in dem keine Zeilen in Ihrer Modellklasse gefunden wurden, eine Zeile ohne Zeilen einfügen, die die Datenaktualisierung behandelt .

Es gibt eine Reihe von Möglichkeiten, dies z.B. Setzen Sie das Feld name / title auf eine bekannte Statusmeldung oder ein Flag innerhalb der Entität. Nach dem Einfügen können Sie die Entity 'no rows' in der CellForRowAtIndexPath-Delegate-Methode erkennen und eine alternative Tabellenzelle einfügen, um die Nachricht anzuzeigen.

Entfernen Sie einfach die Entität "keine Zeilen", bevor Sie die Daten für diesen Abschnitt aktualisieren.

    
Brett 02.09.2012 10:28
quelle