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