Frage

ich auf einem einfachen iPhone App arbeite.

Ich habe 1 UINavigationController und 2 Subklassen von UIViewController.

Ich habe eine MainWindow.xib Datei, ein PersonListView.xib und ein PersonDetailView.xib.

Die MainWindow.xib hat die UINavigationController mit dem Blick auf die Datei PersonListView.xib verknüpft über.

Die PersonListView.xib der Datei Besitzer hat als PersonListViewController Klasse aufgeführt.

Ich habe ein paar Tasten auf der PersonListView, zusammen mit Etikett und Bildern. Alle richtig angezeigt wird.

Wenn ich versuche, einen Knopf auf der PersonListView meiner PersonListViewController Klasse zu verbinden, wird der Button nicht Brennen ....

Das Ergebnis:   * Beenden app aufgrund nicht abgefangene Ausnahme 'NSInvalidArgumentException', Grund: '* - [UIViewController Slide]: Unbekannter Selektor an Instanz gesendet 0x450d50'

Wenn ich in die Debug-Konsole gehen und Print-Objekt 0x450d50, erhalte ich:

(gdb) print-Objekt 0x450d50 (GDB)

Die richtig Interface Builder zeigt die Besitzer der Datei als PersonListViewController, also warum sollte meine Button-Aktion (in Verbindung mit dem Datei-Besitzer) geht auf die übergeordnete Klasse irgendwie?

EDIT1. Ok, was passiert zu sein scheint, ist, dass ich nicht eine Instanz der Unterklasse war immer, es sei denn, in meinem MainWindow.xib, ich explizit die Klasse des View-Controller auf meine Unterklasse gesetzt

Es gibt noch bekommt etwas sein, ich bin fehle, obwohl, weil sicher soll ich in der Lage sein, beliebige Unterklassen von UIViewController zu starten nur durch den Namen aus dem Hauptfenster Datei NIB Auslagern?

EDIT2: (Antwort auf Kevin) Das ist nicht das, was ich sage, in Bezug auf den Inhalt einer XIB.

Ich habe 3 XIBs:

Mainwindow PeopleListView PeopleDetailView

Die PeopleListView und PeopleDetailView jeweils eine zugehörige Datei-Besitzer, die eine entsprechende UIViewController Unterklasse ist. Offensichtlich muß ich meine Ereignisse an den richtigen Controller-Klassen gehen, wie ich von Seite zu Seite bewegen ... aber wenn ich nur einen Standard-UIViewController oder eine Unterklasse verwenden kann, dass viel schwieriger sein?

Ich kann den richtigen Effekt im Code erhalten, indem manuell die UINavigationController mit der richtigen Wurzel einrichten, aber ich fühle mich wie soll es eine bessere Art und Weise durch Interface sein.

EDIT3: (Kendall) Ich bin nicht eine Tab-Leiste verwenden. Das Modell ist die gleiche, aber, dass die Ansicht in meiner Navigationssteuerung zu einer einzigen Unterklasse zu verdrahten hat, die ein bisschen eklig scheint.

Edit4: (bis lostintransit) Der PersonListViewController hat die entsprechenden - (IBAction) Slide; Methode. Das Problem ist, dass ich nicht einen Weg, in meinem MainWindow.xib, um Flagge die Ansicht in meinem UINavigationController als „anfänglich laden diese aus PersonListView.xib mit PersonListViewController wie die Ansicht“ finden können, die nicht es schwierig machen würde, ersetzen Sie die PersonListView mit einem PersonDetailView.

War es hilfreich?

Lösung

Ich denke, Sie eine Tab-Leiste verwenden, richtig?

Wenn ja, denken Sie an es auf diese Weise. Jede Registerkarte im Hauptfenster xib definiert ist als der benutzerdefinierte Ansicht Controller-Typ definiert werden, weil das die Art ist, dass die Tab-Leiste erstellen, wenn es geladen wird. Die Tab-Leiste erstellt View-Controller für jede Registerkarte definiert, wenn es geladen wird.

Es ist nicht genug, um eine Instanz nur jeder View-Controller zu erstellen und laden Sie dann Ihre benutzerdefinierten NIB (das, was der Reiter ist bar Sie definiert haben, ist jetzt zu tun), weil die Verkabelung in Ihrer benutzerdefinierten Ansicht nichts muss anhängen .

So stellen Sie sicher, jeder View-Controller unter den einzelnen Registerkarten in MainWindow.xib (verwenden Sie die Baumansicht in IB, dies zu untersuchen) definiert auf der rechten Seite benutzerdefinierte UIViewController Typ zusätzlich eingestellt ist an Ihrer Gewohnheit XIB zu zeigen, die auch haben muss Datei des Besitzers auf den richtigen Typ (obwohl das nur wichtig ist, wenn man etwas zu Dateien Besitzer über die grundlegenden Ansicht verdrahten).

Andere Tipps

Ändern Sie den Namen des xib hat absolut keinen Einfluss auf den Inhalt dieses xib. Sie wurde den Klassennamen im Info-Fenster ändern, wenn Sie ändern möchten, welche Unterklasse Sie verwenden.

Von der Ausnahme scheint es, dass die Bindung nicht richtig gemacht wurde. Die Signatur der Methode scheint nicht richtig die Beurteilung durch die Ausnahme. Ist die Button-Aktion auf ein Verfahren mit Rückgabetyp IBAction verknüpft? Die Signatur der Methode sollte

- (IBAction) methoden;

Ich habe den gleichen Fehler.

Das Problem ist, dass Sie nicht das Ziel von PersonListViewController.m gesetzt haben.

Gehen Sie

zu Informationen von PersonListViewController.m, wählen Sie Ziele Abschnitt und stellen Sie sicher, dass das Ziel Ihrer Anwendung überprüft wird.

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