私のプログラムは、nswindow(NSWindowControllerオブジェクトによって制御される)を使用して定期的にユーザー入力を実行し、実行を継続します。ここココア:私はユーザーの意見を持っています - 今何ですか?
は、ユーザーの入力を取るために、ウィンドウを呼び出し、表示された私のmyController.mmです:私は、[OK]をクリックするか、キャンセルした後
#import "EncryptPasswordDlgController.h"
@implementation EncryptPasswordDlgController
-(id) init
{
return self;
}
- (IBAction)showWindow:(id)sender
{
[super showWindow:sender];
encryptPasswordDlgWindowController = [[NSWindowController alloc] initWithWindowNibName:@"EncryptionPasswordDlg"];
[encryptPasswordDlgWindowController loadWindow];
[[self window] makeKeyAndOrderFront:[self window]];
return;
}
-(IBAction)clickOK:(id) sender
{
password = [passwordField stringValue];
NSLog(@"password is %@", password);
[[self window] close];
return;
}
-(NSString *)password
{
return password;
}
-(IBAction)clickCancel:(id) sender
{
// close the window
password = nil;
[[self window] close];
//return;
}
@end
:ここ
EncryptPasswordDlgController encPassController = [[EncryptPasswordDlgController alloc] init];
[encPassController showWindow:self];
NSString *inputPassword = [encPassController password];
は私のNSWindowControllerオブジェクトコードでありますボタンを押すと、それぞれのIBActionメソッドが呼び出され、必要に応じて実行されます。つまり、テキストフィールドからユーザー入力を受け取り、OKをクリックするとパスワードも更新されます。しかし、IBActionのclickOKメソッドの実行が終了すると、myController.mmに戻り、次のステートメント "NSString * inputPassword = [encPassController password];を実行してパスワードを取得する必要があります。それは起こっていない。誰かがこのような状況に取り組む方法を提案することができます。
EDIT:返信用
おかげでボブ。 私は自分の間違いが何であるか理解しました。示すように だから私は、whileループを使用して通知方法を試してみました:
while(isPasswordReceivedForEncryption == NO)
{
sleep(10000);
//continue;
}
を私のプログラムの途中で通知が来て、trueにブール変数を設定まで待つように。 しかし、今問題は、それが無限ループに入り、アプリケーションが停止しているということです。
は、ユーザー入力を直接待つMFCのようなものはありません。 本当に、ウィンドウを作成してユーザーの入力を得るのは難しいですか?
あなたは既にこの質問をhttp://stackoverflow.com/questions/1337591/nswindowcontroller-program-executionで尋ねました。毎回新しい質問を投稿しないようにしてください。可能であれば、既存のスレッドを使用してください。 –