简而言之,我的程序所做的是:它使用 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 等价物直接等待用户输入的东西。真的很难创建一个窗口并获得用户输入还是我真的错过了这里的东西????