wake-up-neo.com

Doppelte Symbolprobleme

Während eines Refactors eines iOS-Projekts bin ich auf diesen Bär eines Fehlers gestoßen. Während der Verbindungsphase erhalte ich folgende Nachricht:

ld: Symbol doppelt _OBJC_IVAR _ $ _ TinCanViewController.currentViewController in /path/to/TinCanViewController-E98A666B7AF2673A.o und /path/to/TinCanViewController-E98A666B7AF2673A.o

Soweit ich das beurteilen kann, scheint es so zu sein, als würde TinCanViewController-E98A666B7AF2673A.o das angegebene Symbol zweimal deklarieren. Beide Pfade verweisen auf dieselbe .o-Datei. Ich habe nm für diese bestimmte Datei ausgeführt und dieses Symbol wurde nur einmal eingefügt: 

00008150 S _OBJC_IVAR _ $ _ TinCanViewController.currentViewController

Ich habe nm für alle anderen .o-Dateien im Verzeichnis ausgeführt, um zu sehen, ob sie dieses Symbol irgendwie deklarieren, aber sie sind es nicht. Dies geschieht bei jedem Mitglied, das ich zur TinCanViewController-Klasse hinzufüge - es ist nicht spezifisch für currentViewController.

Ich fühle mich, als müsste ich irgendwie zweimal gegen die Klasse ankreuzen, aber ich habe ziemlich fleißig alle Verweise auf diese Klasse durchgesehen und überprüft. In der überarbeiteten Version gibt es grundsätzlich keine. Das AppDelegate enthält es, aber im Moment ist es im Grunde nur eine Passthrough-Klasse, die beim Start einen anderen ViewController lädt. Keine anderen Klassen im Projekt enthalten es.

Irgendwelche Vorschläge, was das verursacht oder wie ich es besser debuggen könnte?

61
drewww

Ich hatte dieses Problem mit dem neuesten Xcode 4. Ursache: Ich habe file.m anstelle von file.h eingefügt.

Möglicherweise enthalten Sie TinCanViewController.m (sollte TinCanViewController.h sein)

235
Shameem

Ich hatte dies geschafft, aber mein Problem war mit Merge-Problemen aus unserem Repo verbunden. Die .m-Datei wurde zweimal an einer Stelle aufgelistet, an der sie nur einmal aufgeführt werden sollte (innerhalb des Projekts, jedoch nicht innerhalb der Datei-/Gruppenstruktur, sodass Sie das Problem nicht in Xcode sehen konnten, sondern nur den Fehler). Das Update öffnet die .pbxproj-Datei in Ihrer Projektdatei und sucht den doppelten Eintrag in dieser Datei. Nach dem Löschen des Duplikats wurde das Projekt gut erstellt.

31
maxpower

Ich habe die .h-Datei und die .m-Datei zweimal in das Projekt aufgenommen. Nachdem ich die zweite Kopie entfernt hatte, ging der Fehler weg. 

5
Ram

Stellen Sie sicher, dass delegate.m nur einmal in den Compile-Sources aufgeführt wird.

4
Muhammad Irfan

Dieses Problem kann hier gelöst werden, wenn ich alle Dateien (.m und .h) aus dem Klassenordner gelöscht habe (mit Xcode). Dann habe ich Project (Befehl + Umschalt + K) gereinigt und erneut erstellt. Also ziehe ich die Dateien erneut aus dem Finder in den Klassenordner in Xcode. Zum Schluss habe ich mein Projekt wieder sauber gemacht und gebaut ...

Viel Glück !!!

3
Rafael Reis

Ich denke, das ist ein Fehler mit dem neuesten Linker von Apple beim Erstellen universeller statischer Bibliotheken. Ich kann die Fehlernummer derzeit nicht finden, aber dies geschieht, weil sie armv6 und armv7 falsch generiert, ohne sie zu unterscheiden.

Um zu überprüfen, ob dies der Fall ist, ändern Sie die Konfiguration so, dass nur armv6 oder amv7 erstellt wird. Dieses Problem tritt nicht auf.

1
psychotik

Dies kann auch passieren, wenn Sie ein Projekt mit mehreren Zielen haben und zwei Ziele dieselbe Datei wie abc.m haben und abc.m für beide Ziele ausgewählt ist.

In meinem Fall geschah es, dass ich zwei Ziele mit dem Namen ABC und XYZ hatte. Beide hatten ihre eigene DiagramViewController.m-Datei, die Code für ihre Ziele ausführen soll. Ich hatte aus Versehen DiagramViewController.m des Ziels ABC das Ziel auch für XYZ ausgewählt.

Lösung:

Klicken Sie auf .m-Datei, gehen Sie zum Datei-Inspector und deaktivieren Sie das zusätzliche Ziel. 

enter image description here

0
rohan-patel