webentwicklung-frage-antwort-db.com.de

Xcode 6: Es kann kein IBOutlet an ViewController angeschlossen werden

Nach dem Upgrade auf Xcode 6 habe ich ein altes Projekt geöffnet (das ein Unterprojekt enthält, also viele Ziele hat) Ich bemerkte, dass kein Link von meinem Storyboard ViewContoller zu den entsprechenden Objekten funktioniert.

Zum Beispiel habe ich einen ViewController mit einem TableView und jetzt kann ich damit nichts tun, da die Verbindung fehlt. Ich kann nicht einmal ein neues IBOutlet im VC neu definieren, da der Pfeil im Storyboard von der VC wird keine Verbindung hergestellt.

Um klarer zu sein: 

screenshot

Die Klasse ist im Abschnitt "Benutzerdefinierte Klasse" definiert, sodass ich das Problem nicht finden kann

screenshot

Was soll ich tun? Übrigens benutze ich obj-c nicht Swift. Ich habe eine verwandte Antwort gefunden, aber alles über Swift.

19
lorenzop

Sie können auch sehen, dass die Verbindung zwischen der übergeordneten Ansicht und der benutzerdefinierten Klasse unterbrochen ist (nicht mehr sichtbar), was ein großes Problem darstellt.

Ich hatte genau das gleiche Problem mit der App, an der ich gerade arbeite, indem ich XCode von 5.xxx auf 6.1 aktualisiere. Die Problemumgehung bestand für mich darin, die Referenz aller View-Controller zu entfernen und sie dem Projekt wieder hinzuzufügen ...

Für alle, die sich diesem Problem stellen, ist hier der (nervige) Trick:

  • Schritt 1 : Wählen Sie die .h- und .m-Ansicht der Controller-Dateien aus
  • Schritt 2 : Entferne die reference dieser Dateien
  • Schritt 3 : Füge die Dateien erneut zu deinem Projektbaum hinzu
  • Schritt 4 : Öffne das Storyboard, baue das Projekt neu auf und lächle

Ich kann verstehen, dass diese Dinge wirklich ärgerlich sein könnten, aber es hat für mich funktioniert ... Hoffe, es wird jemand anderem helfen!

50
JJBoursier

Wählen Sie in Ihrer Storyboard-Hierarchie den View Controller aus.

enter image description here

Wählen Sie im rechten Bereich der benutzerdefinierten Klasse Class die Dropdown-Liste und den gewünschten View-Controller aus.

enter image description here

22
Tom Howard

In Xcode 6.1.1 habe ich ein ähnliches Verhalten festgestellt, als ich versuchte, den ersten Absatz einer neuen Ansicht hinzuzufügen.

Es wurde versucht, die Verweise zu entfernen und die Dateien wie oben vorgeschlagen erneut ohne Erfolg hinzuzufügen.

Was ich jedoch gefunden habe, war das Schreiben der ersten Eigenschaft der neuen Ansicht von Hand. Ich bin gerade reingekommen:

@property NSString *temp;

Ich könnte dann meine Steckdosen auf normale Weise anschließen. Löschen Sie einfach die temporäre Eigenschaft, sobald Sie Ihr erstes Outlet hinzugefügt haben.

Hoffe das hilft.

5
Adam Nierzad

Es scheint, als würde man zuerst die Steckdose tippen (Swift):

@IBOutlet weak var someViewOutlet: UIView!

und dann von IB die Steckdose nach ganz rechts ziehen, tippen Sie den obigen Code.

Durch den Neustart von Xcode wird das Problem gelöst (manchmal). Verwendung von Xcode 6.1

4
hugey

Vielleicht kann ich helfen. In meinem Fall bestand das Problem darin, dass die viewController.Swift-Datei nicht mit dem StoryBoard verbunden war. Die Lösung besteht darin, auf den oberen Rand der Ansicht im Storyboard neben den 3 Symbolen (View Controller, First Responder und Exit) zu klicken. Sehen Sie sich nun im Utility-Bereich Identity Inspector an und klicken Sie auf "Custom Class" Benutzerdefinierte Ansichtssteuerung.

Hoffe das hilft. Xcode ist hart !!

4
user462990

Hier ist die richtige Lösung, die ich glaube.

Wenn Sie den Controller im Code umbenannt haben, müssen Sie die .xib-Datei aktualisieren.

Ich konnte im Interface Builder keinen Weg finden, also:

  1. Öffnen Sie die .xib-Datei mit einem Texteditor: Klicken Sie mit der rechten Maustaste auf die Datei> Öffnen als> Quellcode 

  2. Suchen Sie im <objects>-Knoten den <placeholder>-Knoten mit der Eigenschaft placeholderIdentifier="IBFilesOwner" und ersetzen Sie den Wert in customClass="MyOldControllerName" durch Ihren neuen Controller-Namen: customClass="MyNewControllerName"

Und alle Ihre IBOutlets funktionieren wieder wie gewohnt.

2
Daniel Moreira

Vielen Dank an alle, die kommentiert haben.

Es ist ein Fehler von Xcode 6/6.0.1. Die Version 6.1 wurde heruntergeladen und installiert, und das Problem ist verschwunden.

1
lorenzop

In Xcode 6.3 musste ich Xcode schließen und den Mac neu starten. Der Neustart von Xcode allein hat es für mich nicht getan.

Ich hatte lange Zeit 6.3 und mein Problem war mit neuen Projekten, die ich schuf, um einige Dinge zu testen. Diesmal definitiv kein Upgrade-Problem.

0
Dan Loughney

keine Lösung behebte mein Problem, aber ich habe es gelöst durch:

  • xcode schließen
  • umbenennen des Ordners des Projekts
  • xcode öffnen

und dann sind die Verkaufsstellen wieder da

Ich hoffe, dass diese Lösung die richtige Lösung für die Menschen ist, die das gleiche Problem haben

0
Kazzar

Okay, lass uns prüfen, ob es das Fehlen eines Modulnamens ist.

  1. Geben Sie im Storyboard ViewController den Namen des Moduls ein. (der Projektname)

2.Klicken Sie außerhalb in ein anderes Feld. Wenn Sie zum Modulfeld zurückkehren, wird möglicherweise keine angezeigt. Jetzt wird ein Dropdown-Menü für Ihren Projektnamen angezeigt.

  1. Wählen Sie Ihren Projektnamen aus und prüfen Sie, ob alles gut ist.

Wenn es noch Probleme gibt, werde ich Fotos posten.

0
Steve Rosenberg

Scheint ein Workspace-Problem zu sein. Versuchen Sie, das Projekt aus einem Arbeitsbereich zu entfernen und es erneut hinzuzufügen. Es hat in meinem Fall geholfen.

0
P_O

Ich habe Xcode 6.3 und sah ein ähnliches Problem. Schließlich lösten einige Änderungen in der .h-Datei mein Problem. Wenn für Ihre Schnittstelle IBOutlet definiert ist 

@interface NavigationViewController :UIViewController
{
  IBOutlet UILabel *lblName;
}

Ändern Sie dies in und in der .m-Datei. add @synthesize lblName;

@interface NavigationViewController :UIViewController
{
   __weak  UILabel *lblName;
}

@property (nonatomic, weak) IBOutlet UILabel *lblName;
0
Ram G.

Ich hatte das gleiche Problem, und es gab keinen Sichtausgang, auf den ich mich verlinken konnte. Die einzige Möglichkeit, das Problem zu beheben, bestand darin, die Besitzerklasse der XIB-Datei in "UIViewController" zu ändern, den Link zu erstellen und ihn dann wieder in meine beabsichtigte benutzerdefinierte Ansichtskontrollerklasse zu ändern. Der Link blieb und alles war gut.

0

Versuchen Sie vielleicht, den Auslass aus dem Menü im Storyboard (in Ihrem Screenshot) zu löschen, und ziehen Sie ihn erneut vom Element.

0
Antoine

Ich hatte das gleiche Problem. 

Es stellt sich heraus, dass ich meine View Controller-Klasse und den Dateinamen umbenannt habe. Im Storyboard hatte ich im rechten Bereich Benutzerdefinierte Klasse -> Klasse den veralteten Wert. Daher stimmten die IBOutlets nicht überein, da in der fehlenden Klasse keine vorhanden war. Dort erwartete sie die definierten Outlets.

Durch das Einfügen des korrekten Klassennamens des View Controllers im Feld Benutzerdefinierte Klasse im rechten Bereich wurde mein Problem behoben.

XCode muss ausführlicher sein, wenn in den Feldern der benutzerdefinierten Klasse ein ungültiger Klassenname vorhanden ist.

0
styler1972

Ich hatte dies, beeinflusste alle Projekte auf meiner Maschine, auf Swift und Objective C und machte mich seit Ewigkeiten verrückt. Schließlich bemerkte ich auch, dass ich den Refraktor nicht verwenden konnte, um Klassen umzubenennen. 

Der Fix für mich war:

  1. Xcode schließen
  2. Löschen Sie ~/Library/Developer/Xcode/DerivedData (dies alleine zu tun hat nicht funktioniert !!)
  3. Löschen Sie alle Benutzerdaten für alle meine Projekte mit folgendem aus dem Verzeichnis, das alle meine Projekte enthält, z./src (sei vorsichtig mit diesem Befehl!):

finden . -name 'xcuserdata' -exec rm -rf {} \;

Wenn Sie dies von Hand tun möchten, führen Sie für alle Ihre Projekte die folgenden Schritte aus

  1. Holen Sie sich Spotlight, um das Laufwerk neu zu indizieren, in dem sich alle meine Projekte befanden (nicht sicher, ob dies erforderlich war
  2. Starten Sie die Maschine neu

Alles wurde wieder lebendig!

0
Tim Teece