Tôi gặp vấn đề tương tự trong trò chơi cocos2d/box2d mà tôi đang xây dựng.
Sự thật 1: Xcode 4 có thể tái cấu trúc mã C và mục tiêu-C (.m tệp) nhưng không thể tái cấu trúc mã Objective-C++ (tệp .mm).
Sự kiện 2: Nếu bạn muốn tương tác với box2d (được viết bằng C++), bạn cần sử dụng Objective-C++.
Tôi đã (một phần) giải quyết vấn đề theo các bước sau:
- Tôi tạo ra một vài wrappers trong Objective-C++ cho các lớp Box2D tôi cần phải tương tác với (ví dụ MyWorld.mm là một wrapper của lớp C++ b2World và MyBody.mm là trình bao bọc cho lớp C++ b2Body). Ở đây nó là rất quan trọng để tránh bất kỳ tham chiếu đến box2d trong .h của wrappers.
- Trong mỗi lớp khác của dự án của tôi, tôi không bao giờ gọi trực tiếp các lớp box2d, tôi gọi thay vào đó là các trình bao bọc liên quan. Tất nhiên tôi cũng đã xóa #import "Box2D.h" khỏi các lớp này.
- Tôi chuyển đổi thành đồng bằng Objective-C (.m) mọi lớp khác của dự án của tôi.
Kết quả là bây giờ Xcode có thể cấu trúc lại mọi lớp của dự án của tôi nhưng trình bao bọc tất nhiên.
P.S. Tất nhiên khi bạn cần sử dụng trình bao bọc (ví dụ: MyWorld) trong các lớp Objective-C, bạn phải nhập MyWorld.h và không phải MyWorld.mm.
Nguồn
2013-04-12 23:55:30
nó "cấu trúc lại" không phải là "khúc xạ" - đó sẽ là một kính viễn vọng;) – LearnCocos2D
cho refactoring i * đôi khi * Sử dụng appcode, refactoring của nó là mạnh hơn. Tuy nhiên nó tải chậm vì vậy đối với tôi nó vẫn còn thực tế hơn để đổi tên trong xcode. – LearnCocos2D