Xcode 4: Erstellen einer UIView xib, nicht ordnungsgemäße Verbindung

84

Ich versuche, eine Schreibfeder zu erstellen, die eine Ansicht enthält, die in eine TableViewCell eingebettet wird. Ich habe die Schnittstellen- und Implementierungsdateien erstellt ResultCell.hund ResultCell.m. Sie sind auf Lager, sofort einsatzbereit, keine Codeänderungen.

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

Hier sind die Probleme, die ich habe:

  1. Bei Verwendung der Assistenten-Editor-Ansicht (in der ich lebe) wird die ResultCell.hDatei nicht angezeigt, wenn ich die Datei ResultCell.xib ansehe. Ich muss das Laden erzwingen, indem ich auf Automatisch klicke und die Datei auswähle.
  2. Wenn ich eine Beschriftung in der Ansicht ablege und dann Strg + Klicken und Ziehen auf .h, um eine Steckdose zu erstellen, wird die folgende Fehlermeldung angezeigt: " Neue Steckdosenverbindung konnte nicht eingefügt werden : Es wurden keine Informationen zu der Klasse mit dem Namen ResultCell gefunden. ""

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

Tim Sullivan
quelle
Ich bin nur selbst darauf gestoßen. Letzte Nacht hat es funktioniert und heute nichts. Ich werde dich wissen lassen, wenn ich etwas finde.
Tavison
Für die Aufzeichnung haben mir mehrere Antworten hier im letzten Jahr geholfen. Neuere Versionen von Xcode haben die Dinge verbessert.
Tim Sullivan

Antworten:

82

Dies funktioniert möglicherweise nicht für Ihr spezielles Problem, aber gelegentlich wird dieser Fehler angezeigt, wenn ich mit neu erstellten Schreibfedern arbeite. Das Löschen und Neuerstellen der Schreibfedern und View Controller mit denselben Namen wie zuvor hat das Problem nicht behoben, das Neustarten von Xcode jedoch.

Defragmentiert
quelle
+1 Hat auch für mich gearbeitet. Starten Sie einfach XCode neu und jetzt kann ich STRG + Ziehen, um neue @propertys in meiner .h-Datei zu erstellen.
Mike Gledhill
1
Die Antwort von David Pisoni hat bei mir funktioniert. Durch einfaches Neustarten von Xcode wurde der Senf nicht geschnitten.
Andy
Ich habe dieses Problem bei vielen Xcode-Versionen noch nicht auftreten lassen, daher gibt es wahrscheinlich eine andere Ursache, die jetzt häufiger auftritt als die, die ich hatte, als ich diese Antwort letztes Jahr schrieb.
Defragmentiert
@Defragged können Sie auch den Schritt zum Löschen des Cache durch Drücken von Befehl K vor dem Zitieren einschließen oder noch besser ist, Xcode zu beenden und dann den Cache zu löschen ( ~/Library/Developer/Xcode/DerivedData)
user1046037
Ich arbeite mit Xamarin Studio. Ich musste xcode und xamarin studio beenden, dann Xamamrin Studio erneut öffnen und von hier aus eine xib-Datei öffnen, die in xcode gestartet wurde. Der Redaktionsassistent wurde dann korrekt geöffnet.
Dave Haigh
113

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

Das Schließen des Projekts und das erneute Öffnen haben das Problem nicht behoben.
Das Beenden von XCode und das Neustarten haben das Problem nicht behoben.
Das Erstellen eines neuen Projekts und das Testen der Funktionalität funktionierten einwandfrei, was mich zu der Annahme führte, dass irgendwo in einem Cache etwas beschädigt war.

Meine Lösung

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

Übrigens schien es nicht klar zu sein, nur eine vollständige Reinigung durchzuführen. Ich musste die abgeleiteten Daten wegwerfen. Ich bin mir sicher, dass ich aufgrund von Git-Spielen, die ich gespielt habe, in diese Position gekommen bin, aber ich hatte keine Ahnung, wie ich rauskommen sollte, denn selbst das Zurückschalten auf frühere Git-Revisionen hat nicht geholfen. (Das war auch ein großer Hinweis darauf, dass es etwas war, das vom Projekt selbst nicht verfolgt wurde.)

David Pisoni
quelle
6
Ich habe mich gerade auf meinem Mac bei SO angemeldet, damit ich diese Antwort positiv bewerten kann! Total für mich gearbeitet. Das hat mich verrückt gemacht, da ich gerade erst lerne, XCode zu benutzen und es ohne solche lächerlichen Probleme schon schwer genug ist. :) Danke!!!
Dave
2
es funktioniert sogar ohne Neustart von xcode; nur abgeleitete Daten löschen und neu erstellen (in einem iOS-Projekt)
nob
Dies funktionierte beim Neustart von xcode nicht. Ich habe keine Ahnung, wie es nach David Pisonis Methode passiert ist.
mmopy
Genial. Wie hast du das gewusst? Hat für mich gearbeitet.
hol
1
lol es ist gut zu wissen, dass IOS und xcode genauso fehlerhaft sein können, wenn nicht mehr als mit Eclipse und Android: p
James andresakis
14

Ich hatte gerade dieses Problem und ein Neustart von Xcode konnte es nicht beheben. Ich habe die Klassendateien aus dem Projekt entfernt, sie dann wieder hinzugefügt und es hat funktioniert.

Jasongregori
quelle
13

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 erneut zum Projekt hinzu

Und fertig!

Dr.Kameleon
quelle
2
Das hat bei mir funktioniert, danke! Es war das erste, was ich versuchte, außer XCode neu zu starten, da es den geringsten Aufwand und das geringste Risiko darstellte und großartig funktionierte.
Adriandz
1
arbeitete für mich nach dem Neustart von xcode und dem Löschen abgeleiteter Daten nicht
elad s
1
Dieser hat den Trick auch für mich gemacht. Dies hat möglicherweise etwas mit der Umgestaltung der Klassennamen zu tun (was ich gerade getan habe).
Ecotax
9

Wenn ein Neustart von Xcode bei Ihnen nicht funktioniert, funktioniert das Ausschalten der neuen .m-Datei in die Zielmitgliedschaft.

Duane Fields
quelle
3

Das hat mir geholfen:

  1. Wählen Sie in der Projektdatei (linke Seite) die fehlerhafte xib-Datei aus.
  2. Klicken Sie in der Editoransicht auf das Symbol Dateibesitzer.
  3. Wählen Sie im Eigenschaftenfenster (rechts) die dritte Registerkarte (oben) aus.
  4. Geben Sie die "Benutzerdefinierte Klasse" an.

Wenn Sie kein "Panel" sehen, schauen Sie bitte in die obere rechte Ecke des Fensters und aktivieren Sie die richtigen "Ansicht" -Schaltflächen. Wenn Sie die "Ansicht" -Schaltflächen nicht sehen, klicken Sie oben rechts auf die Kapselschaltfläche.

Ivan Dossev
quelle
Ich hatte kürzlich den Klassennamen geändert (umgestaltet). Die in dieser Antwort erwähnte benutzerdefinierte Klasse wurde weiterhin auf den alten Namen gesetzt. Es wurde in den neuen Namen geändert und es wurde behoben.
PaulMrG
2

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

Löschen Sie einfach (nur als Referenz) die .m-Datei aus dem Xcode und verschieben Sie .m aus dem en.lproj. Fügen Sie es erneut hinzu. Es wird das Problem beheben.

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

WIE
quelle
Meine .m wurde automatisch generiert und ich hatte sie noch nicht geändert. Ich tat es und alles war in Ordnung. Sonst hatte nichts funktioniert.
Entonio
2

Ich bin heute auf das gleiche Problem gestoßen. Ein Neustart von XCode hat das Problem für mich nicht behoben. Ich konnte die Dinge wieder normalisieren, indem ich die Option "Löschen" von "Abgeleitete Daten" des Projekts verwendete , die sich unter Organizer befindet . Der Organisator sagt, dass "Abgeleitete Daten Index, Build-Ausgabe und Protokolle enthalten". Ich vermute, dass entweder die Index- oder die Build-Ausgabe dieses Problem verursacht hat.

Praveen Kumar
quelle
2

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

Peter Lapisu
quelle
2

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

jakob.j
quelle
Ich denke, das hat es vielleicht auch für mich getan. In meinem Fall habe ich manuell eine Steckdose hinzugefügt. Ich konnte dann meine Nudeln daran anschließen und durch Strg-Ziehen neue Steckdosen erstellen.
Daniel Wood
1
  1. ResultCell sollte eine Unterklasse von sein UITableViewCell
  2. Sie sollten a nicht UIViewauf die leere Leinwand ziehen, sondern aUITableViewCell
  3. Sie sollten die wählen Zelle und ändern es Ihre Unterklasse sein
  4. Der Besitzer ist meistens ein Controller mit einer Steckdose zur Zelle

Rufen Sie jedes Mal auf, wenn Sie eine neue Zelle laden möchten:

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

Verwenden Sie nach dem Laden die Zelle und stellen Sie den ivar / Auslass auf Null, um für die nächste Ladung bereit zu sein

Es gibt andere Möglichkeiten, aber das ist üblich

bshirley
quelle
Wenn ich das mache, habe ich genau das gleiche Problem. Der Assistant Editor zeigt die .h nicht an, wenn ich die Schreibfeder ansehe, und Strg + Ziehen erstellt keinen Outlet-Code, sondern zeigt den Fehler an.
Tim Sullivan
2
Verwenden Sie 4.0.2 Xcode? Sie können den Assistenten-Editor manuell einstellen, wenn er sich schlecht verhält. Ich gehe davon aus, dass Sie die App neu gestartet haben, um dieses Problem erneut zu testen (Xcode 4 profitiert häufig davon). Klingt so, als ob die Klassendateien im Projekt nicht gefunden werden können oder etwas falsch benannt ist - Großschreibung wichtig. Wird das Projekt gerade gebaut? Dies ist eine sehr hochwertige Funktionalität, die von der neuen Compilertechnologie abhängt.
Bshirley
Aw, eff mich. Ja, Xcode neu starten und es fing sofort an zu funktionieren. »Entschuldigen Sie, ich werde jetzt auf mein Schwert fallen.
Tim Sullivan
1

Vielleicht hat das für mich funktioniert .. (Xcode v4.5)

Das hat nicht funktioniert

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

@interface SearchViewController : UIViewController

@end

Dies funktionierte (vielleicht sollte es so funktionieren, ich wusste es vorher nicht). Siehe die offenen und geschlossenen Klammern. Steuern Sie Drag & Drop nach der geschlossenen Klammer.

@interface SearchViewController : UIViewController
{
}

@end
Mouli
quelle
1

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

Was für mich funktioniert hat, war das Einrichten des IBOutlets in Code wie diesem

@IBOutlet var foo: UIView?

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

Patrick
quelle
Dies ist der EINZIGE Weg, wie ich es auch für mich zum Laufen bringen konnte. Ich folgte einem Apple-Tutorial, das für Objective-C geschrieben wurde (Entwickeln von iOS-Apps noch heute) und musste das Textfeld Neues Aufgabenelement verbinden. Schließlich habe ich @IBOutlet var textField erstellt: UITextField? und damit verbunden, und es hat funktioniert. Verwenden von XCode 6.4
Andrewz
1

Keine der oben genannten Problemumgehungen hat das Connector-Problem für mich behoben, sodass ich mein Haustierprojekt zurückgestellt habe, bis ich auf den folgenden Stackoverflow-Thread gestoßen bin:

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

Ich hatte in einer früheren Version von XCode an einem großen Projekt gearbeitet und die Indizierung deaktiviert. Durch erneutes 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 ...

user2846800
quelle
1

Dieses Problem scheint ein Xcode-Fehler zu sein, der hauptsächlich auftritt, wenn Sie eine Datei durch eine neue Datei mit demselben Namen ersetzen. Xcode scheint eine Referenz der älteren gleichnamigen Datei 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 Kompilierungsquellen unter Erstellungsphasen des Ziels, für das Sie erstellen. Entfernen Sie die .m-Datei und fügen Sie sie wieder hinzu, was Ihnen Probleme bereitet.
  3. Alternativ können Sie im Dateiinspektor (Ansicht Dienstprogramme) der NIB-Datei unter Zielmitgliedschaft den Zielnamen deaktivieren und erneut überprüfen.
  4. Starten Sie Xcode für eine gute Maßnahme neu.
  5. Das Löschen und Hinzufügen der .m-Datei allein sollte dies natürlich auch beheben.

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

Codebrand
quelle
0

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

John67
quelle
0

Ähnliches Symptom, aber unterschiedliche Ursache.

Anscheinend habe ich die Rücktaste gedrückt, als der Fokus auf der Assistentenansicht lag, weil eine der Standardkommentarzeilen für Dateivorlagen von // nach / ging, was dazu führte, dass die Datei nicht kompiliert wurde.

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

SO - Wenn Sie dieses Problem haben, führen Sie einen Build oder eine Analyse durch, um festzustellen, ob Fehler in der .h-Datei Ihres View Controllers behoben werden müssen. Dann probieren Sie die anderen Lösungen.

Software entwickelt
quelle
0

Dies mag ein altes Thema sein, aber falls jemand in Zukunft das gleiche Problem hat, versuchen Sie, die zugehörigen .xib-, .h- und .m-Dateien zu löschen und neue zu erstellen. Für mich war der UIViewController in meiner .h-Datei nicht lila, und selbst das Zurücksetzen und Eingeben half nichts.

SG
quelle
0

Setzen Sie einfach eine Linie zwischen @implementation und @synthesize. Die meisten Antworten hier haben das gemeinsam. Es hat bei mir funktioniert

@implementation 

@synthesize
user2371963
quelle
0

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

Das einzige, was für mich funktioniert hat, war, diese unvollständige Zeile in meine Schnittstellendatei einzufügen:

@property (nonatomic, weak)

Aus irgendeinem Grund funktionierte das Hinzufügen von Outlets und Aktionen per Drag & Drop von einer .xib danach einwandfrei.

dschibuti33
quelle
0

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

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

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

Fabian Stark
quelle
0

Ich hatte dieses Problem und fand eine Lösung, die oben nicht aufgeführt ist.

In meinem Fall konnte ich feststellen, dass in der .h-Datei der Klasse etwas nicht stimmte, da mein benutzerdefinierter Ansichts-Controller die Klasse nicht erkannte: UIViewController (sie war in Schwarz und nicht in Lila). Alle anderen benutzerdefinierten Ansichts-Controller hatten den: UIViewController in lila.

In meinem Fall und möglicherweise in Ihrem Fall musste ich die Klasse zu den Dropdown-Listen Ziele / Erstellungsphasen / Kompilieren von Quellen hinzufügen. Die .m muss hinzugefügt werden. Alle anderen .m waren da, aber nicht diese.

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

Michendo
quelle
0

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 gelöscht oder XCode neu gestartet habe, aber es konnte nicht funktionieren. Am Ende habe ich die folgende Methode ausprobiert und sie funktioniert:

Gehen Sie zu Ziel> Nur Zielarchitekturen erstellen> und setzen Sie Debug und Release auf NO.

Stellen Sie dies für alle Projekte im Arbeitsbereich ein und kompilieren Sie erneut, um sicherzustellen, dass keine weiteren Fehler vorliegen. Vielleicht macht es keinen Sinn, aber irgendwie hat es getan. Während meiner Kompilierung wurden andere Probleme wie Linkerfehler und Symbole nicht gefunden.

morph85
quelle
0

Öffnen Sie für die * .m-Datei dieser Klassenansicht "Show File Inspector" und deaktivieren Sie "Target Membership" für dieses Projekt. Führen Sie dann Clean (Menü Product-> Clean) aus und aktivieren Sie erneut "Target Membership" für dieses Projekt

Geben Sie hier die Bildbeschreibung ein

Kozlov V.
quelle
0

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

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

Wenn ich ein UITextField hineinzog, um eine Steckdose zu erstellen, ließ es mich nicht. Ich habe festgestellt, dass in meinen Kommentaren immer noch "ViewController.swift" steht, daher habe ich den Kommentartext in "TestViewController.swift" geändert und neu erstellt. Ich konnte meine Steckdose anschließen!

Ich frage mich, ob der Indexer sowohl die Kommentare als auch die Klassennamen gelesen hat und irgendwie verwirrt war.

Antonio Ciolino
quelle
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 XCODE neu starten.

Du solltest gut gehen!

Ronaldoh1
quelle
0

Die neue Klasse, die nicht Teil des "ZIELS" ist, ist wahrscheinlich die Hauptursache dafür, wie in einigen dieser Antworten angedeutet.

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

Neues Klassenziel

Jede dieser Problemumgehungen, mit denen die neue Klasse zum Apps-Ziel hinzugefügt wird, behebt das Problem und hat all diese "Korrekturen" 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. Der Fix läuft darauf hinaus, Ihre 'kaputte' Klasse zum Hauptziel hinzuzufügen

Michael Bopp
quelle
0

In XCode 7.1 funktionierte das Hinzufügen des Connectors an einer anderen Stelle in meiner Quelldatei. Der Fehler, den ich auf eine meiner Variablen verwies, als wäre es eine Klasse (ergab keinen Sinn). Der Fehler trat nicht mehr auf, als ich den Konnektor unter dieser Variablen anstatt über dieser hinzufügte.

user2683747
quelle
0

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

Die Lösung wäre, es zu löschen und mit der richtigen Vorlage neu zu erstellen Geben Sie hier die Bildbeschreibung ein

Mihir Mehta
quelle