3

@implementation を含む .m ファイルがありますが、サイズが大きくなりすぎたため、いくつかのメソッド関数を 2 番目のファイルに移動しようとしています。

両方の .m ファイルは

@implementation GesticulatorViewController

@synthesize score_display;
@synthesize game_status;
@synthesize player_options;
@synthesize total_players_field;
@synthesize gesticulation_sentence;
@synthesize gesticulation_input;
@synthesize main_view_manager;
@synthesize game_state;

しかし、リンカの警告が表示されます: "ld: シンボルが重複しています _OBJC_IVAR_$_GesticulatorViewController.gesticulation_input "

4

4 に答える 4

3

2 つの異なるファイルに同じクラスの実装を含めることはできません。

あなたの場合、GesticulatorViewControllerの実装を 2 つの.mファイルに分割することはできません。

編集:

Objective-C のカテゴリを使用して、実装を分散させます。

カテゴリを使用すると、同様のタスクを実行するメソッドをグループ化する機会があります。

Apple のドキュメントからの「カテゴリと拡張機能」の説明は次のとおりです 。 TP30001163-CH20-SW1

于 2012-06-21T17:51:15.193 に答える
2

複数のコントローラーを作成することをお勧めします。各コントローラーは異なる部分を処理します。

私はビデオアプリを作っています。PlayerControlsViewControllerがあり、ビュー内にすべての再生ボタンと一時停止ボタンがあります。

選択ツールとメニュー項目を含むツールコントローラーもあります。

これらのコントローラーのプロパティは、そのコントローラービューを取得し、スーパービューから削除します。次に、ビューを独自のビュー内のどこかに設定し、PlayerControllerに接続します。その中にプレイヤーを収容します。

これらの各コントローラーには、タスクを処理するための独自のコードが格納されています。そして、それぞれのプロトコルを介してメインビューコントローラにメッセージを送り返します。

これにより、他のコントローラー間でコマンドが相互に中継され、メインビューコントローラーの設定が維持されます。

これは、アプリが正しく機能し、簡単に保守できるようにするために期待される操作の標準であると私は信じています。

この方法は、ナビゲーションコントローラーとタブコントローラーでも機能します。それらは独自のコードを維持しているため、独自のビュー内に別のViewControllerビューを追加できます。

ビューに追加する前に、スーパービューから削除することを忘れないでください。

于 2012-06-21T17:57:04.360 に答える
1

すべてを1つのビューに表示する必要があるが、実装が大きすぎると思われる場合は、いつでもカテゴリを実行できます:)[ファイル]->[新規]->[Objective-Cカテゴリ]に移動するだけです。次に、View Controllerでカテゴリを作成し、追加します。

カテゴリに新しいivarまたはプロパティを追加できないことを覚えておいてください。ただし、元のクラスのプロパティとivarを利用することはできます。

また、.mビューコントローラーファイルに大量のコードがある場合は、MVCパラダイムをもう少し調べて、一部の機能を他のクラスに分割することを検討してください。ビューコントローラはビ​​ューの変更のみを処理する必要があることを忘れないでください。データ操作などは他のクラスで実行する必要があります:)

于 2012-06-21T18:07:07.913 に答える
1

もう 1 つのオプションは、いくつかのメソッドのソース コードを別の .m ファイルにコピーし、そのファイルをメインの .m ファイルに #include することです。メイン ファイルからメソッドを切り取る位置に #include を配置します。

これを機能させる秘訣は、#include ソース ファイルをプロジェクトに追加することですが、すべてのターゲットのチェックを外します。Xcode が単独でファイルをコンパイルしようとするのは望ましくありません。メイン ビュー コントローラー ファイルに #include するだけです。

于 2012-06-21T18:46:14.103 に答える