Erstellen einer nib-Datei für eine Tabelle, View-Controller
Ich versuchte zu Folgen, die Table View Programming Guide for iPhone OS aber hatte Schwierigkeiten beim erstellen einer neuen Tabelle, View-Controller, lädt seine Daten aus einer nib-Datei.
Speziell, ich versuchte, führen Sie die Schritte in dieses Teil:
Wenn Sie es vorziehen, laden Sie die Tabelle anzeigen
verwaltet durch eine eigene Tabelle-Ansicht
controller aus einer nib-Datei, müssen Sie
das folgende tun:
- Im Interface Builder erstellen, eine leere Cocoa Touch nib-Datei (Datei >
Neue).- Ziehen Sie ein UITableViewController-Objekt aus dem Interface Builder
Bibliothek in der nib-Dokument-Fenster.- Speichern Sie die nib-Datei in Ihrem Projekt-Verzeichnis unter einem geeigneten Namen
und, wenn Sie dazu aufgefordert werden, wählen Sie Ihre
Projekts haben sich die nib-Datei Hinzugefügt
es.- Wählen Sie Tabelle-View-Controller in der nib-Dokument-Fenster und öffnen Sie die
Identity Bereich der Inspektor. Set
die Klasse, um Ihre benutzerdefinierte Tabelle-Ansicht
controller-Klasse.- Wählen Sie "File' s Owner der nib-Dokument-Fenster, und legen Sie seine Klasse
Identität, um die benutzerdefinierte Tabelle-Ansicht
controller-Klasse.- Anpassen, die das table view im Interface Builder.
- Wählen Sie das table-view-controller in der nib-Dokument-Fenster, öffnen Sie die
Attribute-Bereich des Fensters "Informationen", und
eingeben (oder auswählen) die Namen der nib
Datei in der Spitze des Feldes.
So, ich habe eine neue UITableViewController subclass in Xcode (genannt "MyTableViewController"), dann ging ich in IB und befolgt die Schritte. Ich stellte sicher, zu verknüpfen alle Klasse Attribute den gleichen Namen wie die UITableViewController subclass ich in Xcode, wie es sagt, in die Schritte.
Aber jetzt bekomme ich die folgende Warnung in IB:
"My Table View Controller" sowohl mit seinen
"Blick" und "Nib-Name" - Eigenschaften gesetzt.
Diese Konfiguration wird nicht unterstützt.
Wenn ich die Anwendung ausführen, und drücken Sie den table view controller, es erscheint aber, wie es scheint, nichts wird geladen, aus der nib-Datei (wie ich den alpha-Wert auf 0 statt 1).
Eine Idee, was ich falsch mache?
Danke für die Hilfe.
Hier einige weitere Informationen, die Ihnen helfen könnten zu verstehen, die situation zu verbessern.
Ich bemerkte ein paar Unterschiede zwischen dem erstellen einer UITableViewController mit der Vorlage (z.B. durch Schaffung einer neuen Navigation-basierte Anwendung) vs. die Schaffung eines sich selbst (z.B. nach der oben genannten Schritte). Ich werde sich auf jeden als TemplateNib und CustomNib, beziehungsweise, um es einfacher zu machen zu verstehen, die Unterschiede.
In TemplateNib, hat es die folgenden Objekte in das Dokument-Fenster:
- File ' s Owner
- First Responder
- Tabelle Anzeigen
In CustomNib, hat es die folgenden Objekte in das Dokument-Fenster:
- File ' s Owner
- First Responder
- Meine Custom Table View Controller
- Tabelle Anzeigen
Weiterer Unterschied ist in dem File ' s Owner-links...
TemplateNib die File ' s Owner:
- Outlets
- tableView -> Tabelle Anzeigen
- Ansicht -> Tabelle Anzeigen
- Referencing Outlets
- dataSource -> Tabelle Anzeigen
- delegieren -> Tabelle Anzeigen
CustomNib File ' s Owner:
- Outlets
- Ansicht -> (nichts)
CustomNib Meinem Tisch View-Controller:
- Outlets
- Ansicht -> Tabellen-Ansicht (diese ist Grau unterlegt, so kann man nicht löschen)
- Referencing Outlets
- dataSource -> Tabelle Anzeigen
- delegieren -> Tabelle Anzeigen
Update:
Habe ich versucht zu imitieren die .xib-Datei, die erstellt wird, von der Vorlage, indem Sie die folgenden Schritte aus:
- Erstellt eine leere Datei im Interface Builder.
- Satz der Besitzer der Datei auf die Klasse, die erbt von UITableViewController.
- Hinzugefügt eine Tabelle Anzeigen, um das Dokument-Fenster.
- Gesetzt, die das Table View dataSource und delegate File ' s Owner.
- Satz der Besitzer der Datei-Ansicht, um die Tabelle Anzuzeigen.
- Hinzugefügt tableView Anwesen im Identity-Bereich von Typ UITableView.
- Satz der Besitzer der Datei tableView-Eigenschaft (die die ich gerade erstellt), um die Tabelle Anzuzeigen.
Dies aber immer noch scheint, wie es wird nicht geladen, es aus der NIB-Datei. (Ich habe auch nie den Namen der NIB-Datei überall obwohl... gibt es überall, die ich brauche, um es oder sieht es für eins mit dem gleichen Namen?).
Dann habe ich versucht, überschreiben initWithNibName zu laden von den Namen der nib-Datei, und jetzt scheint es zu laden es aus der nib-Datei. Allerdings, wenn ich Blick auf die .m-Datei des TemplateNib table view controller, es braucht nicht, diese Methode außer Kraft setzen, wieso ist das so? Ich denke immer noch, ich mache es der falsche Weg, verursachen Sie den Programming Guide nicht erwähnt hat, etwas über es zu tun auf diese Weise.
Update:
Habe ich versucht den Vergleich der beiden .xib-Dateien mit einem diff-tool, der einzige wesentliche Unterschied zwischen den beiden scheint zu sein:
<string key="superclassName">UITableViewController</string>
//and:
<reference key="NSSuperview"/>
Ich don ' T sehen jede Bezugnahme auf die Nib-Datei in die original Datei irgendwo, sind es andere Dateien, die ich überprüfen sollte?
Update:
Scheint es, wie die Sache, dass macht TemplateNib Last aus der nib-Datei, die im Hauptfenster.xib (default-name durch die Vorlage), RootViewController Hinzugefügt, mit der Spitze die Eigenschaft Name mit dem Wert "RootViewController". Zusätzlich, Ihre Klasse ist auf "RootViewController".
Habe ich versucht, indem Sie einen Haltepunkt in beiden initWithNibName:bundle: und initWithStyle: auf der RootViewController, aber es wird nie dort. Ich bin irgendwie Fragen, wie der TableViewController erstellt wird, wenn Sie es in das Hauptfenster.xib-so.
Ich auch versucht, indem die my custom table view controller MainWindow.xib, Einstellung der Klasse und Feder-Namen in der Hoffnung, dass es geladen wird es aus der nib-Datei, die ich angegeben, aber es funktioniert noch nicht nennen iniWithNibName.
Vielen Dank, sehr nützliche
InformationsquelleAutor Senseful | 2009-10-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wo, um oben genannte Methode?
InformationsquelleAutor Senseful
Ich hatte das gleiche problem Letzte Nacht und fand diesen post, während Sie versuchen, die Antwort zu suchen. Ich landete, es zu lösen.
Grundsätzlich musste ich öffnete die falsche XIB-Datei (von der ich hoffte main_window.xib, nicht der view-Controller-xib)
Schnitt ich alle Steuerelemente von meinem Haupt-xib, klebten Sie in der xib-Controller, alles neu ausgerichtet, wieder alle Steckdosen/Aktionen und die Warnung ging Weg 🙂
Hoffe, das jemand hilft 🙂
InformationsquelleAutor Matt
Adler, wenn Sie eine neue Datei erstellen, wählen Sie die "UIViewController subclass" - Symbol. Es gibt eine checkbox, die machen es zu einem UITableViewController subclass nur über das Feld, um XIB-Datei.
InformationsquelleAutor No Surprises
Du hast zwei Orte, an denen Ihre UITableViewController zeigt im Interface Builder.
(1) Es zeigt sich in der Feder als mit dem Controller eigenen Namen.
(2) Es zeigt sich als ein controller-Objekt in der nib-von einem anderen Objekt, in der Regel das Hauptfenster.
Dein problem ist, an (2). Es gibt zwei Möglichkeiten zum einstellen der tableview für ein UITableViewController im Interface builder. Ersten, können Sie eine UITableView unter dem controller in der MainWindow-und zu verbinden, dass der controller die view-Eigenschaft. Zweitens, können Sie bringen, bis der Inspektor im Attribute-Bereich und in der popmenu aufgeführt "NibName" wählen Sie den Namen der Controller nib.
Sie nicht verwenden können beide Systeme auf einmal, weil der erste lädt den view aus der nib-Datei MainWindow und zweite lädt einen vollständig unabhängigen Blick von der Steuerung trennen nib-Datei.
Dies ist einer jener wahnsinnigen Fehler, dass die Verwendung von Interface Builder macht so schwer auf die Spur.
InformationsquelleAutor
Anstatt das zu tun, all das, würde ich die "Neue Datei" iPhone-UI-Vorlage zum erstellen eines TableViewController mit xib-Datei-option an. Dann erhalten Sie mit einem controller und einer xib-Datei sind alle miteinander verdrahtet richtig.
InformationsquelleAutor Kendall Helmstetter Gelner