В двух словах моя программа делает следующее: она выполняется и периодически принимает пользовательский ввод с помощью nswindow (который управляется моим объектом NSWindowController) и продолжает выполнение.
вот мой myController.mm, который вызывает и показывает окно для ввода данных пользователем:
EncryptPasswordDlgController encPassController = [[EncryptPasswordDlgController alloc] init];
[encPassController showWindow:self];
NSString *inputPassword = [encPassController password];
вот мой код объекта nswindowcontroller:
#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
после того, как я нажму кнопку «ОК» или «Отмена», соответствующий метод IBAction вызывается и выполняется по мере необходимости, т. Е. Он показывает окно, в котором пользователь вводит данные из текстового поля, и при нажатии «ОК» он также обновляет пароль. Но после завершения выполнения метода IBAction clickOK он должен вернуться обратно в myController.mm и получить пароль, выполнив следующую инструкцию «NSString *inputPassword = [encPassController password];» чего не происходит. Пожалуйста, может кто-нибудь предложить способ решения этой ситуации.
ИЗМЕНИТЬ:
Спасибо Боб за ответ. Теперь я понял, в чем была моя ошибка. Итак, я попробовал метод уведомления, используя цикл while, как показано:
while(isPasswordReceivedForEncryption == NO)
{
sleep(10000);
//continue;
}
в середине моей программы, чтобы дождаться прихода уведомления и установить для переменной bool значение true. Но теперь проблема в том, что он переходит в бесконечный цикл, и мое приложение зависает.
нет ничего похожего на эквивалент MFC, где он напрямую ожидает ввода пользователя. Неужели так сложно создать окно и получить пользовательский ввод, или я действительно что-то упускаю????