Gibt es eine Möglichkeit, gemischten C ++ / Objective-C-Code in Xcode zu refobieren? Ich schreibe ein Spiel mit Cocos2D und Box2D, und die Box2D ist auf C ++ geschrieben, so dass jede Klasse, die ich schreibe, .mm Extension haben sollte und daher, wenn ich z. benenne die Variable um, ich erhielt eine Nachricht wie " Xcode kann nur C- und Objective-C-Code umgestalten ".
Vielen Dank im Voraus!
Xcode ist SEHR begrenzt mit Refactoring, sogar mit einfachem Obj-C. Es ist im Grunde umbenennen und es kann nicht einmal in Kommentaren umbenennen. Wenn es sagt, dass es etwas nicht kann, dann kann es wahrscheinlich nicht.
Die einzige Möglichkeit zum Umbenennen ist die Verwendung von find & replace
. Beachten Sie, dass Xcode reguläre Ausdrücke verarbeiten kann, so dass es oft gut genug ist.
Natürlich ist das Problem, dass find & amp; Ersetzen Sie nicht die Programmiersprache und manchmal kann einige zusätzliche ersetzen oder vergessen, etwas zu ersetzen, daher besonders vorsichtig sein. Ein sauberer Build ist nach jedem Refactoring notwendig, um zu überprüfen, ob alles korrekt umbenannt wurde.
Sie können auch Befehlszeilenprogramme verwenden (z. B. sed
), um dasselbe zu erreichen.
Ich hatte das gleiche Problem im cocos2d / box2d-Spiel, das ich gerade entwickle.
Fakt 1: Xcode 4 kann C- und Objective-C-Dateien (.m-Dateien) umgestalten, aber es kann keinen Objective-C ++ - Code (.mm-Dateien) umgestalten.
Fakt 2: Wenn Sie mit box2d (das in C ++ geschrieben ist) interagieren wollen, müssen Sie Objective-C ++ verwenden.
Ich habe (teilweise) das Problem mit den folgenden Schritten behoben:
Das Ergebnis ist, dass Xcode jetzt jede Klasse meines Projekts umgestalten kann, aber natürlich die Wrapper.
P.S. Wenn Sie einen Wrapper (z. B. MyWorld) in Ihren Objective-C-Klassen verwenden müssen, müssen Sie natürlich MyWorld.h und nicht MyWorld.mm importieren.
Ich hatte eine Art Lösung - um Objective-C und Objective-C ++ - Code zu trennen. Es gibt einige Makros, die erkennen lassen, ob die Datei in reinem Objective-C verwendet wird. Beispiel:
Die Idee ist, dass Sie .mm-Dateien immer noch nicht umgestalten können, aber Sie können den ganzen anderen Code umgestalten, selbst wenn er Objective-C ++ - Code enthält.
Tags und Links objective-c c++ xcode cocos2d-iphone box2d