wake-up-neo.com

Xcode 4: Erstellen eines UIView-Xib, Verbindung nicht ordnungsgemäß hergestellt

Ich versuche, eine Spitze zu erstellen, die eine Ansicht enthält, die in eine TableViewCell eingebettet wird. Ich habe die Schnittstellen- und Implementierungsdateien ResultCell.h und ResultCell.m erstellt. Sie sind sofort lieferbar, keine Code-Änderungen.

Ich erstelle dann eine leere XIB-Datei und ziehe eine UIView darauf. Dann klicke ich auf den Besitzer der Datei und setze den Typ auf ResultCell. Ich klicke auf die Ansicht und setze die Klasse auf ResultCell.

Hier sind die Probleme, die ich habe:

  1. Bei Verwendung der Assistant Editor-Ansicht (in der ich wohne) wird die ResultCell.h-Datei nicht angezeigt, wenn ich die ResultCell.xib-Datei sehe. Ich muss das Laden erzwingen, indem Sie auf Automatisch klicken und die Datei auswählen.
  2. Wenn ich ein Etikett in der Ansicht ablege und dann Strg + Klick und zum Erstellen eines Auslasses auf .h ziehen, wird folgende Fehlermeldung angezeigt: " Neue Anschlussverbindung konnte nicht eingefügt werden: Keine Informationen zum Klasse mit dem Namen ResultCell. "

Ich habe versucht, die Ansicht zu erstellen und neu zu erstellen, sie funktioniert einfach nicht und ich habe meine Geduld verloren. Jede Hilfe wäre sehr, sehr dankbar!

83
Tim Sullivan

Dies funktioniert möglicherweise nicht für Ihr spezifisches Problem, aber gelegentlich erhalte ich diesen Fehler, wenn ich mit neu erstellten Spitzen arbeite. Das Löschen und Wiederherstellen der Nibs und View Controller mit denselben Namen wie zuvor löste das Problem nicht, das erneute Starten von Xcode jedoch.

80
Defragged

Ich bin gerade heute in einen ähnlichen Zustand geraten. Es war sehr seltsam: Ich konnte jede XIB (neue oder vorhandene) an eine bereits vorhandene ViewController-Klasse im Projekt anhängen, aber ich konnte keinen neuen ViewController erstellen und ihn ordnungsgemäß an eine XIB anhängen. Die "Assistent" -Funktionalität funktionierte nicht, und auch die IB-zu-Headerdatei-Verbindungsfunktion.

Das Schließen des Projekts und das erneute Öffnen konnten nicht behoben werden.
Beim Beenden von XCode und beim Neustart wurde der Fehler nicht behoben.
Das Erstellen eines neuen Projekts und das Testen der Funktionalität funktionierte gut, was mich zu der Überzeugung brachte, dass irgendwo irgendetwas beschädigt war.

Meine Lösung

  • Schließen Sie Ihr Projekt.
  • Wechseln Sie in den Ordner ~/Library/Developer/XCode/DerivedData und ENTFERNEN Sie alle Unterordner dort, die auf das Projekt verweisen, an dem Sie gerade arbeiten.
  • Öffnen Sie Ihr Projekt in XCode. Das Problem sollte jetzt behoben sein.

Übrigens schien das reine Reinigen der Dinge nicht zu klären. Ich musste die abgeleiteten Daten verwerfen. Ich bin mir sicher, dass ich aufgrund von Git-Spielen, die ich gespielt habe, in diese Position geraten bin, aber ich hatte keine Ahnung, wie ich herauskommen sollte, denn selbst der Wechsel zu früheren Git-Revisionen half nicht. (Das war auch ein großer Hinweis, dass das Projekt an sich etwas unberührt hatte.)

112
David Pisoni

Ich hatte das gleiche Problem. Und ich habe versucht:

  • Xcode neu starten
  • Abgeleitete Daten löschen
  • Und viele mehr

Nichts davon hat funktioniert. Was für mich funktionierte, war einfach:

  • Entfernen Sie verdächtige Klassendateien aus Project (entfernen Sie einfach Referenzen, oder?)
  • Fügen Sie sie dem Projekt erneut hinzu

Und fertig! 

13
Dr.Kameleon

Ich hatte gerade dieses Problem und ein Neustart von Xcode hat es nicht behoben. Ich entfernte die Klassendateien aus dem Projekt, fügte sie wieder hinzu und es begann zu arbeiten.

13
jasongregori

Wenn Xcode nicht neu gestartet werden kann, habe ich festgestellt, dass das Umschalten der neuen .m-Datei in die Zielmitgliedschaft funktioniert.

9
Duane Fields

Das hat mir geholfen:

  1. wählen Sie im Projektdatei-Bedienfeld (linke Seite) die defekte Xib-Datei aus.
  2. Klicken Sie in der Editoransicht auf das Symbol für den Dateieigentümer.
  3. wählen Sie im Eigenschaftenbereich (rechte Seite) die dritte Registerkarte (oben) aus.
  4. geben Sie die "benutzerdefinierte Klasse" an.

Wenn Sie kein "Panel" sehen, schauen Sie sich bitte die rechte obere Ecke des Fensters an und aktivieren Sie die entsprechenden "View" -Schaltflächen. Wenn Sie die Schaltflächen "Ansicht" nicht sehen, klicken Sie oben rechts auf die Schaltfläche "Kapsel".

3
Ivan Dossev

klicken Sie in XCode zum Organizer, klicken Sie auf Projekt, klicken Sie auf abgeleitete Daten löschen ... und löschen Sie das Projekt

2
Peter Lapisu

Ich habe festgestellt, dass die .m-Datei in den Ordner en.lproj verschoben wurde.

Löschen Sie einfach (nur Referenz) die .m-Datei aus dem Xcode und verschieben Sie sie aus dem en.lproj. Fügen Sie es erneut hinzu. Das Problem wird dadurch behoben.

Keine Sorge, Sie erhalten alle Ihre Verbindungen zurück.

2
A.S.

In meinem Fall half es, eine "falsche Änderung" (nur ein Leerzeichen) an der entsprechenden Header-Datei vorzunehmen.

2
jakob.j

Ich bin heute auf das gleiche Problem gestoßen. Durch den Neustart von XCode wurde das Problem für mich nicht behoben. Ich konnte die Dinge wieder normalisieren, indem ich "Delete" Option von "Abgeleitete Daten" des Projekts die unter Organizer gefunden wird. Der Organisator sagt: "Abgeleitete Daten umfassen Index, Build-Ausgabe und Protokolle". Ich vermute, dass entweder index oder build - Ausgabe dieses Problem verursacht hat.

2
Praveen Kumar

Vielleicht hat das bei mir funktioniert .. (Xcode v4.5)

Das hat nicht funktioniert

Ich habe versucht, das Ziehen in die Schnittstellendefinition meiner .h zu steuern

@interface SearchViewController : UIViewController

@end

Das hat funktioniert (Vielleicht sollte es so sein, ich wusste es vorher nicht). Steuern Sie Drag & Drop nach der geschlossenen Klammer.

@interface SearchViewController : UIViewController
{
}

@end
1
Mouli

Ich hatte ein ähnliches Problem mit einem in Swift geschriebenen Projekt.

Was für mich funktionierte, war das IBOutlet in diesem Code einzurichten

@IBOutlet var foo: UIView?

und verbinden Sie es anschließend mit dem Interface Builder, indem Sie auf den kleinen Kreis ziehen, der direkt neben der Codezeile angezeigt wird.

1
Patrick

Dieses Problem scheint ein Xcode-Fehler zu sein, der sich meistens verschlechtert, wenn Sie eine Datei durch eine neue Datei mit demselben Namen ersetzen. Xcode scheint einen Verweis auf die ältere Datei mit demselben Namen zu behalten.

Wie auch immer, der Weg, dies zu beheben, scheint zu sein:

  1. Reinigen Sie das Projekt
  2. Klicken Sie in der Projektnavigatoransicht auf (Ihr Projekt). Gehen Sie zu Compile Sources unter Build Phases des Ziels, für das Sie erstellen. Entfernen Sie die .m-Datei, und fügen Sie sie zurück, wodurch Sie Probleme bekommen.
  3. Deaktivieren Sie alternativ im Dateiinspektor (Ansicht "Dienstprogramme") der NIB-Datei unter "Zielmitgliedschaft" den Zielnamen, und überprüfen Sie ihn.
  4. Starten Sie Xcode erneut, um eine korrekte Messung durchzuführen.
  5. Das Löschen und Hinzufügen der .m-Datei allein sollte dies natürlich ebenfalls beheben.

(Die Schritte 1 und 2 haben es für mich behoben.)

1
codeburn
  1. ResultCell sollte eine Unterklasse von UITableViewCell sein
  2. Sie sollten keine UIView auf die leere Leinwand ziehen. Sie sollten eine UITableViewCell ziehen.
  3. Sie sollten cell auswählen und it ändern, um Ihre Unterklasse zu sein
  4. Der Besitzer ist meistens ein Controller mit einem Ausgang zur Zelle

Wenn Sie eine neue Zelle laden möchten, rufen Sie Folgendes auf:

 [[NSBundle mainBundle] loadNibNamed:nibName 
                               owner:controllerWithOutletToCell 
                             options:nil]

verwenden Sie nach dem Laden die Zelle, und setzen Sie den ivar/-auslass auf null, um für die nächste Ladung bereit zu sein

es gibt andere Wege, aber das ist üblich

1
bshirley

Keine der oben genannten Problemumgehungen löste das Connector-Problem für mich. Daher habe ich mein Haustierprojekt zurückgestellt, bis ich auf den folgenden stackoverflow-Thread stieß:

https://stackoverflow.com/a/15873770/2846800

Ich habe an einem großen Projekt in einer früheren Version von XCode gearbeitet und die Indizierung deaktiviert. Durch das erneute Aktivieren der Indizierung wurde mein Problem behoben:

defaults delete com.Apple.dt.XCode IDEIndexDisable

Ich kann jetzt die D & D-Funktionen von Interface Builder verwenden. Ich hoffe das kann anderen helfen ...

1
user2846800

Für mich, ob das Reinigen oder Löschen der DerivedData das Problem gelöst hat.

Ich habe mehrmals versucht, meine UIViewController-Klasse zu löschen und neu zu erstellen, und bekam das Problem immer wieder.

Dann habe ich die UIViewController-Klasse neu erstellt und ihr einen anderen Namen gegeben. Dies hat das Problem für mich gelöst.

0
Fabian Stark

Ich habe das gleiche Problem. Das Wiederaufbauprojekt hilft mir Command+B.

0
Eugene Mekhedov

Fügen Sie einfach eine Linie zwischen @implementation und @synthesize ein. Die meisten Antworten hier haben das gemeinsam. Es hat für mich funktioniert

@implementation 

@synthesize
0
user2371963

Dies kann ein altes Thema sein, aber für den Fall, dass jemand in Zukunft das gleiche Problem hat, löschen Sie die zugehörigen .xib-, .h- und .m-Dateien und erstellen Sie neue. Für mich war der UIViewController in meiner .h-Datei nicht lila und sogar das Hin- und Herschwenken und das Eingeben half nicht.

0
S.G.

Durch das Umbenennen der Klassendateien wird möglicherweise die Verknüpfung mit dem XIB aufgehoben. Diese Antwort hat mir geholfen, das herauszufinden:

Strg-Ziehen von der Schaltfläche zur Methode funktioniert nicht. Xcode/Interface Builder

Überprüfen Sie, ob Ihre benutzerdefinierte Klasse im Identitätsinspektor richtig eingestellt ist.

0

Ähnliches Symptom, aber unterschiedliche Ursache. 

Anscheinend habe ich die Rücktaste gedrückt, als der Fokus auf der Assistentenansicht lag, weil eine der Kommentarzeilen der Standardvorlage von // nach/ging, wodurch die Datei nicht kompiliert wurde. 

Durch das Korrigieren des Kommentars konnte das SDK die Datei analysieren, als UIViewController erkennen und dem Ausgang hinzufügen.

SO - Wenn Sie dieses Problem haben, führen Sie einen Build oder eine Analyse durch, um zu sehen, ob Fehler in der View-Controller-Datei (H) behoben werden müssen. Dann probieren Sie die anderen Lösungen.

0

Hoffe, das hilft jemandem da draußen.

Ich musste nur den abgeleiteten Datenordner löschen. Sie müssen auf Fenster -> Organizer -> Projekte -> Abgeleitete Daten löschen klicken

UND NEUSTART XCODE.

Du solltest gut sein!

0
Ronaldoh1

Mit Swift hatte ich ein ähnliches Problem. Ich fand heraus, dass die Kommentare für mich ein Teil des Problems waren.

Ich nutzte den Standard-View-Controller, arbeitete ein wenig daran und erstellte dann einen zweiten View-Controller, indem ich den gesamten ersten kopierte, ihn auf viewDidLoad () reduzierte und die Klasse in TestViewController umbenannte. Builds funktionierten, Code wurde ausgeführt. Alles war gut.

Wenn ich ein UITextField zu einem Outlet gezogen habe, würde ich das nicht zulassen. Ich habe bemerkt, dass in meinen Kommentaren immer noch "ViewController.Swift" angezeigt wurde. Daher wurde der Kommentartext in "TestViewController.Swift" geändert und neu erstellt. Ich konnte meine Steckdose anschließen!

Ich frage mich, ob der Indexer die Kommentare sowie die Klassennamen las und irgendwie verwirrt war.

0
Antonio Ciolino

Ich habe einfach alles hier ausprobiert und nichts hat funktioniert (mit einer Developer Preview für Xcode 5).

Das einzige, was für mich funktionierte, war, diese unvollständige Zeile in meine Interface-Datei aufzunehmen:

@property (nonatomic, weak)

Aus irgendeinem Grund funktionierte das Hinzufügen von Ausgängen und Aktionen per Drag & Drop aus einer .xib.

0
djibouti33

Wenn Sie Dateien aus einem anderen Projekt kopiert haben, aktivieren Sie das Kontrollkästchen "Zu Zielen hinzufügen"

0
John67

Es gibt auch einen anderen Grund für das Problem ... wenn Sie eine neue Kakaoklassendatei mit einer anderen Vorlage als ios erstellt haben ... kann es passieren.

Die Lösung wäre, es zu löschen und mit der richtigen Vorlage erneut zu erstellen  enter image description here

0
mihir mehta

Wenn ich versuche, die Aktionsfunktion mit unten stehender Methode automatisch zu generieren, kam ich zu diesem Problem.

 enter image description here

Aber ich kann es mit unten machen, die Action-Funktion zuerst manuell schreiben und dann den Bereich der @IBAction-Funktion ziehen

0
Kris Roofe

Ich habe dieses Problem gehabt und eine Lösung gefunden, die oben nicht aufgeführt ist.

In meinem Fall konnte ich feststellen, dass in der Klasse .h-Datei ein Fehler aufgetreten ist, da mein benutzerdefinierter View-Controller die Klasse nicht erkannt hat: UIViewController (in Schwarz und nicht in Violett). Alle anderen benutzerdefinierten Ansichtscontroller hatten: UIViewController in Lila.

in meinem Fall und möglicherweise auch in Ihrem Fall musste ich die Klasse Ziel/Build-Phasen/Compile-Quellen hinzufügen hinzufügen. Das .m muss hinzugefügt werden. Alle anderen Ms waren da, aber nicht diese.

Nachdem ich es hinzugefügt hatte, erschien der: UIViewController in Lila und alles funktionierte gut.

0
Michendo

In XCode 7.1 funktionierte das Hinzufügen des Connectors an einer anderen Stelle in meiner Quelldatei. Der Fehler, den ich bekam, wurde auf eine meiner Variablen verwiesen, als wäre es eine Klasse (machte keinen Sinn). Der Fehler trat nicht mehr auf, wenn ich den Connector unterhalb dieser Variablen statt oberhalb davon hinzufügte.

0
user2683747

Die neue Klasse, die nicht Teil von "TARGET" ist, ist wahrscheinlich die Hauptursache dafür, wie auf einige dieser Antworten hingewiesen wird. 

Beim Erstellen einer neuen Kakaoklasse ist standardmäßig die Option zum Hinzufügen einer neuen Klasse zum Ziel standardmäßig aktiviert. Sollte dies jedoch aus irgendeinem Grund nicht aktiviert sein, wenn Sie auf "Speichern" klicken, wird dieses Problem auftreten. 

New Class Target

Jede dieser Problemumgehungen, durch die die neue Klasse zum Apps-Ziel hinzugefügt wird, kann zur Behebung des Problems beitragen. Diese "Fixes" haben alle gemeinsam.

Ich denke, XCode hat wahrscheinlich einige Fehler, die dazu führen, dass eine neue Datei standardmäßig NICHT zum Hauptziel der Apps hinzugefügt wird. Die Korrektur läuft darauf hinaus, dass Ihre "kaputte" Klasse zum Hauptziel hinzugefügt wird

0
Michael Bopp

Für meinen Fall habe ich mehrere Projekte mit einigen anderen Abhängigkeiten. Ich habe versucht, das Problem zu lösen, indem ich abgeleitete Daten löschte oder XCode neu startete. Am Ende habe ich folgende Methode ausprobiert und es funktioniert:

Gehen Sie zu target> Create Target Architectures Only> und setzen Sie Debug und Release auf NO.

Legen Sie dies für alle Projekte im Arbeitsbereich fest und kompilieren Sie es erneut, um sicherzustellen, dass keine anderen Fehler auftreten. Vielleicht nicht sinnvoll, aber irgendwie hat es funktioniert. Während meiner Kompilierung hatte ich andere Probleme wie Linker-Fehler und Symbole, die nicht gefunden wurden.

0
morph85

Um die * .m-Datei dieser Klassenansicht zu öffnen, öffnen Sie "Dateiinspektor anzeigen" und deaktivieren Sie "Zielmitgliedschaft" für dieses Projekt. Klicken Sie anschließend auf "Reinigen" (Menü "Produkt" -> "Bereinigen") und prüfen Sie erneut "Zielmitgliedschaft" für dieses Projekt

enter image description here

0
Kozlov V