Вкратце, что делает моя программа: она выполняет и периодически вводит пользовательский ввод, используя 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 получает вызов и выполняет выполнение по мере необходимости, т. е. отображает окно, в которое вводится пользовательский ввод из текстового поля, и при нажатии ok он также обновляет пароль. Но после того, как он завершит выполнение метода IBOction clickOK, он должен вернуться к myController.mm и получить пароль, выполнив следующий оператор «NSString * inputPassword = [encPassController password]»; чего не происходит. Можете ли вы предложить способ решить эту ситуацию.
EDIT:
спасибо Боб за ответ. Теперь я понял, какова была моя ошибка. Так я попробовал метод уведомления, используя время цикла, как показано ниже:
while(isPasswordReceivedForEncryption == NO)
{
sleep(10000);
//continue;
}
в середине моей программы так, чтобы ждать, пока уведомление приходит и устанавливает переменную Ий истина. Но теперь проблема в том, что она идет в бесконечный цикл, и мое приложение застревает.
Нет ничего похожего на эквивалент MFC, где он непосредственно ждет ввода пользователем. На самом деле это сложно создать окно и получить пользовательский ввод, или я действительно что-то пропустил здесь?
Вы уже задали этот вопрос по адресу http://stackoverflow.com/questions/1337591/nswindowcontroller-program-execution.Пожалуйста, постарайтесь не публиковать новый вопрос каждый раз; используйте свой существующий поток, когда это возможно. –