2017-01-30 5 views
0

私は2つのウィンドウでこのOSXアプリケーションを開発しています。 1つのウィンドウには、カスタムビューコントローラを備えたNSビューがあります。私は、ウィンドウコントローラがビューコントローラに伝える必要がある重要な情報を含むグローバル変数を持っています。残念ながら、これらのグローバル変数は変更できません。ユーザーがいくつかの項目を選択するNSPopUpButtonsが2つあることがわかります。これらのポップアップボックスのインデックスを取得し、これらの値をグローバル変数に割り当てます。または少なくとも私は望みますが、グローバル変数は変更されず、これらの変更をNSViewコントローラから読み取ることはできません。これらの変数を他のクラスに渡す最良の方法は何ですか?Objective Cのクラス間で変数を通信する

#import <Cocoa/Cocoa.h> 
#import "gameView.h" 

extern int gameOn; //variable managing if the game is running or not 

extern int gameMode; //variable managing what game mode it is: 0:menu, 1: VS, 2: practice 

extern int player1Type; //variable for storing selected player 1 character 

extern int player2Type; //variable for storing selected player 2 character 

は、最終的にビューコントローラ(gameView:

ウィンドウコントローラ.M:

-(IBAction) vsGameOpener: (id) sender 
{ 
    player1Type = [player1Select indexOfSelectedItem]; 
    player2Type = [player2Select indexOfSelectedItem]; 
    gameMode = 1; 
    [self unhideWindows]; 

} 

ウィンドウコントローラ.Hをグローバルに割り当てられ

#import "MenuController.h" 


int gameOn = 0; //global variable 

int gameMode = 0; //global variable 

int player1Type; //global variable 

int player2Type; //global variable 

...選択された項目。 m):

#import "gameView.h" 

#import "MenuController.h" 

extern int gameMode; //global variable 

extern int gameOn; //global variable 

extern int player1Type; //global variable 

extern int player2Type; //global variable 
+0

実際にグローバル変数を使用している場合は、どこからでもアクセス可能でなければなりません。しかし、これは非常に悪い習慣です。 2つのクラスがどのようにリンクされているかにもよりますが、おそらく2つのクラスのいずれかのプロパティを調べる必要があります。コードの関連部分を共有してください。 – jcaron

+0

質問に追加されたコード – Jobalisk

+0

私は両方のクラスからグローバル変数にアクセスすることができますが、初期化された数値に設定されています。初期化されたクラスからでも変更することはできません。 – Jobalisk

答えて

0

大丈夫ですが、グローバルがうまくいきました。私が持っていた問題は、グローバル値が変更される前にnsviewのイニシャライザが実行されたために、nsviewを含むウィンドウが表示されたときにnsviewを再初期化する必要があるということでした。

関連する問題