2012-04-06 13 views
0

Ich bin ein Beispiel implementieren, in diesem Beispiel, ich lese Daten aus einer Datenbank, in ein Array, sortieren Sie es, und es wird mit dem RootViewController angezeigt. Die DB-Lese- und -Array-Ladung erfolgt vor dem RVC-Code. Also, es funktioniert, ich bekomme die Daten in dem Fenster, das vom RVC erstellt wurde, und da ist auch ein Nav-Controller.RootViewController muss Data Array xcode 4.3 neu laden/neu laden

Ich möchte eine Schaltfläche oder etwas zu dem Nav-Controller hinzufügen, so dass, wenn Sie es treffen, sendet es einen Wert zurück an die Datei RootViewController.m, dann basierend auf diesem Wert, möchte ich das Array und zeigen es noch einmal im RootViewController-Fenster.

Ich bin mir nicht sicher, wie das geht. Welche Änderungen müsste ich an der .xib und der RootViewController.m Datei vornehmen?

Bitte, ich bin ein verwirrter Nube. % -0 Vielen Dank.

Antwort

0

Es gibt eine Menge dazu, also werde ich einige allgemeine Punkte geben und wenn einige von ihnen Probleme verursachen, kann es einfacher sein, kleinere Details auszuarbeiten.

In Ihrer viewDidLoad-Methode von RVC können Sie eine Schaltfläche erstellen und sie als rechte oder linke Schaltfläche im Navigationselement Ihres Controllers festlegen.

Sie können diese Schaltfläche mit einer Methode in Ihrem Controller verknüpfen, die beim Tippen auf die Schaltfläche die gewünschten Funktionen ausführt. (Aber eine Taste sendet keine Werte, wirklich, also müssen Sie vielleicht mehr über diese Idee zu erklären.)

Ich nehme an, die RVC hat eine Tabellenansicht, wenn Sie Array-Inhalte zeigen, so einmal das Array (veränderbar Array, nehme ich an) wird neu sortiert, Sie können der Tabellenansicht mitteilen, dass sie ihre Daten neu laden soll.

+0

Danke. Ich kann mehr als eine Taste/Tabulator verwenden ... Sie werden Spaltennamen sein, nach denen Sie sortieren können, also müssen sie nicht unbedingt einen Wert SENDEN, solange ich zwischen ihnen unterscheiden kann. Vielen Dank! Was die Tabellenansicht angeht, ist sie nicht in der xib, sie wird programmatisch im RVC erstellt, also zeigt sie die Zeilen an, tippt auf eine Zeile, sie zeigt das Detail an, es funktioniert, obwohl ich den Code nicht richtig gemacht habe mein Gebot. Angenommen, ich sortiere das Array basierend auf einer Aktion aus dem RVC-Fenster, WIE, genau, um der Tabellenansicht mitzuteilen, dass sie ihre Daten neu laden soll? – Piwacket

+0

Was ich getan habe (und es funktioniert nicht, aber ich muss verstehen, warum), ist das Ziehen eines Knopfleistenknopfes auf den Fußbereich des Nav-Controllers im IB. Ich habe seine Aktion mit dem Dateibesitzer verbunden, der RVC ist. Es gibt ein synthetisches bButton1; in der Implementierung und einer Aktion - (IBAction) buttonPressed: (ID) Absender { NSLog (@ "howdy doody"); } . In der Schnittstelle: Eigenschaft (stark, nicht atomisch) UIBarButtonItem * bButton1; Wenn ich die Schaltfläche drücke, wird es beendet und im Protokoll sehe ich: - [UIApplication buttonPressed:]: unerkannter Selektor an Instanz – Piwacket

+0

gesendet Der Fehler besagt, dass Sie die Aktion der Schaltfläche mit dem UIApplication-Objekt und nicht mit RVC verbunden haben. Ich weiß nicht, warum das so ist, aber überprüfe die Identität, die für den Eigentümer der Datei gesetzt ist. –

0

In Antwort auf Ihre sekundäre Frage, sobald Sie Ihr Array (oder allgemein aktualisiert Ihre Daten wie Sie wollen) zurückgegriffen Sie die Tabellenansicht neu zu laden

programmatisch
[tableView reloadData]; 

Wo Tableview "Ihre Instanz ist erzwingen Variable, die auf Ihre Tabellenansicht zeigt

+0

Danke. I * THINK * Ich tat dies, indem ich [self.tableView reloadData] sagte. Aber ich bin mir nicht sicher, ich habe einige NSLog-Stms eingefügt und es führt ViewDidLoad nicht erneut aus ...Würde ein reloadData dazu führen, dass viewDidLoad erneut ausgeführt wird? Ich weiß, dass es aufgrund einer Protokollanweisung zur Aktionsroutine der Schaltfläche gelangt, aber wenn es versucht, Daten direkt nach dieser Anweisung erneut zu laden, scheint es nicht zu passieren. Bitte beraten. Danke im Voraus. Und fröhliche Ostern. – Piwacket

+0

Nein, reloadData bewirkt nur, dass die TableView-Datenquelle aktualisiert wird. Wenn Sie dies sehen möchten, können Sie eine NSLog-Anweisung einfügen oder innerhalb von: ** - (UITableViewCell *) tableView: (UITableView *) tableView ZelleForRowAtIndexPath: (NSIndexPath *) indexPath ** Dies wird NICHT ViewDidLoad verursachen erneut ausführen. – MobileVet

+0

Piwacket, nur eine freundliche Note. Phillip und ich haben beide für Sie Hilfe geleistet. Es ist angemessen, dass Sie eine Antwort korrekt markieren und sie möglicherweise auch "upvoten". – MobileVet