간단히 말해서 내 프로그램의 기능은 다음과 같습니다. NSWindowController 객체가 제어하는 nswindow를 사용하여 주기적으로 사용자 입력을 실행하고 실행을 계속합니다. 여기 코코아 : 내 사용자의 의견이 있습니다 - 지금 무엇입니까?
는 호출하고 사용자 입력을 위해 창을 보여주는 내 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;
}
을 내 프로그램의 중간에 알림이 오면 true로 부울 변수를 설정까지 기다릴 수 있도록. 하지만 문제는 무한 루프가되어 응용 프로그램이 멈추는 것입니다.
사용자 입력을 직접 기다리는 MFC와 비슷한 것은 없습니다. 정말 창을 만들고 사용자 입력을 얻는 것이 어렵거나 여기에 뭔가가 빠져 있습니다.
이미이 질문을 http://stackoverflow.com/questions/1337591/nswindowcontroller-program-execution에서 요청했습니다.매번 새로운 질문을 게시하지 마십시오. 가능할 때마다 기존 스레드를 사용하십시오. –