webentwicklung-frage-antwort-db.com.de

IBOutlet kann nicht mit dem Interface Builder verbunden werden

Ich habe eine seltsame Erfahrung. Ich erstelle eine beliebige iPhone-Anwendung und füge einen UIViewController mit Xib-Datei hinzu. Ich kann die Xib-Datei mit Steuerelementen bearbeiten und sehen, wenn sie ausgeführt wird. Jetzt versuche ich, dem Controller ein paar IBOutlets hinzuzufügen, also füge ich sie der .h-Datei hinzu und synthetisiere die .m-Datei. Dann gehe ich zum Interface Builder, um die Ausgänge zu verbinden. Ich ziehe das UILabel in die UIView, und dann versuche ich, den File Owner (den meinen benutzerdefinierten UIViewController) anzuschließen, aber alles, was ich auswählen kann, wenn ich versuche, eine Verbindung zum UILabel herzustellen, ist "view", was offensichtlich falsch ist. Daher kann ich IBOutlets nicht mit ihren Steuerelementen im Interface Builder verbinden.

Irgendwelche Ideen?

24
haider

Ich habe eine Kombination der Dinge in diesem Thread gemacht und hatte endlich Erfolg.

Im Interface Builder (nicht Xcode)

  1. Datei-> Alle Klassendateien neu laden
  2. Datei-> Klassendateien lesen (wählen Sie MyClass.h)
  3. Verbinden Sie den Besitzer der Datei erneut mit
    ein. Klasse auf "MyClass" setzen
    b. Erneutes Verbinden der Ansicht mit der Ansicht des Besitzers der Datei

Jetzt ist alles wieder normal. Seltsam.

Hoffe das hilft mehr als es verwirrt ;-)

41
Kevin Fisher

Zeigen Sie im Interface Builder Datei-> Klassendateien lesen auf die Klasse des Besitzers Ihrer Datei an. Das hat es für mich behoben.

6
diatrevolo

Hatte das gleiche Problem.

Behebung des Problems durch ein doppeltes Überprüfen des Attributs "Class" des Besitzers meiner Datei im Identitätsinspektor.

6
Suiz Uzcategui

Sind Sie sicher, dass der Besitzer der Datei korrekt auf Ihren benutzerdefinierten UIViewController eingestellt ist und dass Sie gespeichert Ihre .h-Datei gespeichert haben, nachdem Sie das Schlüsselwort IBOutlet zur Instanzvariablen und hinzugefügt haben?

4
Ben S

Haben Sie sichergestellt, dass Sie Ihre Outlets in Ihrer .h-Datei als geeigneten Typ definieren? Wenn Sie versuchen, ein Textfeld in IB zu verbinden, sollte Ihre .h-Datei etwa wie folgt aussehen:.

IBOutlet UITextField    *MyTextField;

Stellen Sie sicher, dass der Typ UITextField (oder UITextView usw.) ist. Wenn Sie sie als NSString eingeben oder etwas anderes als nicht geeignet ist, können Sie sie im Interface Builder nicht verbinden.

3
Michael

Wenn Sie Ihre UI-Steuerelemente nicht per Rechtsklick (oder STRG) -> Dropdown-Liste mit Code verbinden konnten, gibt es eine andere Möglichkeit. Halten Sie im Interface-Builder die STRG-TASTE gedrückt, halten Sie die Drogemaus unter "Dateieigner" im Hauptfenster des Interface Builder auf Ihr UI-Steuerelement (Beschriftung, Schaltfläche usw.). Die Dopopdown-Liste mit allen von Ihnen definierten Outlets wird angezeigt. Einfach nur eine Wahl!

3
Luiza Charmberg

Ich hatte so ziemlich das gleiche Problem wie du. Ich weiß nicht, ob Sie Ihr Problem noch gelöst haben, aber ich habe alle Namen der Klassen einschließlich des Viewcontrollers geändert, aber der Name des Dateiinhabers bleibt unverändert. Also habe ich auf den Besitzer der Datei doppelt geklickt -> Klicken Sie auf i, um das Fenster zu öffnen. -> Ändern Sie den Namen im Feld Klasse in den neuen Namen des Viewcontrollers. Dann hat es funktioniert. Vielleicht möchten Sie es noch einmal versuchen und sehen, ob es funktioniert. Viel Glück.

3
chepukha

Ich hatte das gleiche Problem für den LONGEST. Das Ändern des Dateieigentümers "Type" in "MyClassViewController" anstelle von "UIViewController" im Klassenidentitätsfenster hat mein Problem behoben. Es ist sinnvoll, da UIViewController als Besitzertyp der Datei nur die für die Basisklasse spezifischen Eigenschaften anzeigt. Wenn Sie den Typ in MyClassViewController ändern, erhalten Sie Zugriff auf seine Auslässe und alle geerbten Instanzen. Hoffe das hilft!

3
Adrian

File->Read Class Files (select MyClass.h) Hat die Arbeit für mich erledigt.

2
Mr H

XCode -> Product -> Clean

Arbeitete für mich.

2
Michael

Ich hatte das gleiche Problem, und ich habe gerade den Vorschlag von diatrevolo ausprobiert: Klicken Sie auf Datei, dann auf Klassendateien lesen und zeigen Sie auf die Besitzerklasse Ihrer Datei.

Das hat es für mich behoben. Ich würde +1 Diatrevolo, aber ich habe noch keinen Ruf ...

1
martin jakubik

Für mich bestand das Problem darin, dass ich eine MyUITextView erstellt habe, die die UITextView-Erweiterung erweitert, und X-Code würde keine Verbindung herstellen. Meine Problemumgehung bestand darin, UITextView in IBOutlet temporär zu verwenden, um eine Verbindung herzustellen/zu verknüpfen und dann zu meiner benutzerdefinierten Ansicht zu wechseln. 

Also habe ich mich verändert. 

IBOutlet MyUITextView *tv;

zu 

IBOutlet UITextView *tv;

und dann verbunden/verknüpft. Nach dem Herstellen der Verbindung habe ich mein OBOutlet wieder in MyUITextView geändert

IBOutlet MyUITextView *tv;
1
verma

tötet mich jedes Mal, aber manchmal, wenn Sie xcode schließen und wieder öffnen, werden die Dinge behoben ... Ist mir gerade mit diesem exakten Problem passiert ...

1
Lior Frenkel

Ein Neustart von Xcode 5.1 hat es für mich getan.

1
tboyce12

Ich weiß nicht genau, warum es die IBOutlet-Verbindungen nicht automatisch herstellt, aber ich habe eine Problemumgehung gefunden. Ich musste die Ausgänge manuell über die Bibliothek im Interface Builder für meinen Kundenansicht-Controller hinzufügen. Wenn jemand den Fix findet, damit er automatisch aus der .h-Datei gelesen wird (wie es sein soll), wäre ich sehr dankbar, wenn er ihn veröffentlicht hätte.

danke dir

0
haider

Ich bin ein totaler Neuling und hatte das gleiche Problem. Ich versuchte, Diatrevolos Vorschlag auszuprobieren, und fand heraus, was mein Problem verursachte. Ich hatte meinen ViewController ursprünglich irgendwo in der Projekthierarchie an einem beliebigen Ort erstellt und dann in den Klassenordner verschoben. Dies bedeutete, dass sich die eigentlichen Dateien nicht im Klassenordner befanden, aber das Projekt dachte, dass es sich um Dateien handelt, und so suchte IB an der falschen Stelle. Ich habe die eigentlichen Dateien mit Finder in die eigentliche Klassendatei verschoben und sie dann gelöscht und in das Projekt eingelesen. Dann hat alles geklappt!

0
mk.

Ich hatte auch hier Probleme, und am Ende arbeitete ich für mich daran, die App vor dem Öffnen des Interface Builder zu erstellen. Voodoo!

0
Jason

Nachdem ich einige XIB-Dateien lokalisiert hatte, reagierten die Ansichten nicht auf in Interface Builder vorgenommene Aktualisierungen. Einfache Lösung war die App vom Simulator/Gerät zu löschen . Beim nächsten Build & Run wurde die Anwendung korrekt aktualisiert.

Dies geschah nur während der Bereitstellung der App über XCode im Simulator. Scheint, als ob XCode versucht, den Build zu optimieren, und wird verwirrt.

0
leviathan

Ich habe geschrieben 

@IBOutlet weak var title: UILabel!

in der UIViewController-Textdatei dann von der Datei mit dem Label im Storyboard verbunden, und es hat funktioniert!

0
coolcool1994