Frage

Sortieren einer einfachen Frage. Ich habe eine Tableview in einem Navigation. Wenn ich eine Zelle berühren, drückt er einen View-Controller mit den Informationen aus der Zelle, so dass ich es in der neuen Ansicht bearbeiten kann. Nun, das ist richtig arbeiten (wir nennen es das informationpath: „RootViewController -> gedrückt Viewcontroller“). Aber wenn ich außer in der neuen Ansicht klicken, möchte ich die bearbeiteten Werte Reise zurück in die RootViewController bevor ich popviewcontroller (informationpath: „gepusht Viewcontroller -> RootViewController“) nennen, so können die geänderten Werte in der Tableview angezeigt werden.

Was ist der richtige Ansatz, um das?

EDIT:

Pushviewcontroller und popViewController arbeitet. Ich fragte nur für den besten Ansatz, um die aufbereiteten Informationen zurück zur RootViewController für die Anzeige im Tableview zu bekommen, wenn Save-Taste (popViewController) genannt wurde. Ich denke, ich werde einfach direkt aus dem geschoben Viewcontroller den pList mit den neuen Informationen zu bearbeiten habe. Obwohl ich es vorziehen würde, die neuen Informationen an die RootViewController Senden und haben es den Zugriff auf die pList-Datei geöffnet werden.

War es hilfreich?

Lösung

Ich habe die gleiche Situation - zwei Tableviews. Die erste TV zeigt eine Liste von Datenbankeinträgen und wenn man abgegriffen wird es geht in die zweiten Tableview, die die Einzelheiten der Aufzeichnung anzeigt. Ich tue dies, indem Sie die Daten auf den Tableviewcontroller Navigationscontroller Stapel schieben. So weit, so gehen und ganz einfach.

Das Problem, das ich gestoßen war, dass nach dem Datensatz in der Detailtabelle Ansicht aktualisieren (Controller), wollte ich die Liste Tabelle View-Controller wissen lassen, so dass sie die Liste der Datensätze aktualisieren konnten.

Das erste, was ich tat, war eine Eigenschaft an den Details Tisch-View-Controller hinzufügen, so dass, wenn eine Zeile in der Liste der Datensätze ausgewählt wurde, wird die Liste Controller die Kerndaten der verwalteten Einheit auf die Details Controller passieren könnte.

Zur gleichen Zeit habe ich auch die Liste Controller als Beobachter von Kerndatenänderungs-Ereignisse wie folgt hinzugefügt:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dataSaved:) name:NSManagedObjectContextDidSaveNotification object:nil];

Also, wenn die Details der Tabellenansicht und Controller Update des Datensatz, die Liste Controller hat es die dataSaved: Methode aufgerufen, ein Objekt NSNotification vorbei.

In der dataSaved: Methode untersuchen ich das Objekt, und wenn die Kerndateneinheit bearbeitet wird in der aktualisierten Liste, dann stelle ich eine Flagge ein Update auf das Signal erforderlich ist. Jedoch, wenn es ein Datensatz in der Liste eingefügt ist, bedeutet dies, dass ein neuer Datensatz in die Datenbank erstellt und eingesetzt worden ist, so wird ein Flag gesetzt wird, eine vollständige Neuladen der Listentabelle view triggern.

Wenn der Benutzer kehrt in die Listenansicht-Controller wird die viewDidAppear: Methode ausgelöst. Bei diesem Verfahren untersuche ich die Flaggen und entweder Anruf

- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation

, um den bestimmten Datensatz zu laden, wenn der Datensatz aktualisiert wurde, oder die Tabellenansicht erzählen eine vollständige Neuladen zu tun, wenn ein Einsatz eines neuen Datensatzes ist.

Schließlich dann entferne ich die Liste Controller als Beobachter von Kerndatenbenachrichtigungen, weil es nicht mehr interessiert ist.

Ich weiß nicht, ob dies der empfohlene Weg, dies zu tun, aber so weit es funktioniert für mich.

Andere Tipps

Sie können vor popViewController zu reload versuchen, aber Sie sollten einige Code schreiben.

Alle UIViewControllers haben eine navigationController Methode. Wenn Sie einen View-Controller auf eine Navigationssteuerung drücken, wird diese Eigenschaft auf Punkt auf dem Navigationscontroller eingestellt.

Also, nur [self.navigationController popViewControllerAnimated:YES]; im View-Controller aufrufen.

Auch nicht confuse Ansichten und View-Controller. Wenn Sie auf Speicher in der Ansicht klicken, sollten Sie sicherstellen, dass die Schaltfläche Speicher ein Verfahren auf Ihrem View-Controller aufruft, die wiederum im Gespräch mit dem Navigationscontroller.

Beim Antippen eine Zeile Sie sind mit entsprechenden Informationen zu neuer Ansicht gehen.

Hier führen Sie eine Operation wie Daten bearbeiten. Also zuerst speichern Sie die Änderungen auf, klicken Sie auf Speichern, um (durch einen IBAction Aufruf) und in diesem IBAction Methode prüft wheter (Änderungen erfolgreich gespeichert werden), dann rufen

[self.navigationController popViewControllerAnimated: YES];

Und sorgen dafür, dass Tabelle reload selbst durch aktualisierte databese (für diese Änderung Array von Daten durch Datenbankmethode in viewWillAppear Methode aufrufen).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top