En bref, ce que mon programme fait est: il exécute et prend l'entrée de l'utilisateur périodiquement en utilisant nswindow (qui est contrôlé par mon objet NSWindowController) et continue l'exécution.Cocoa: J'ai l'entrée de mon utilisateur - Maintenant quoi?
ici est mon myController.mm qui appelle et montrant la fenêtre pour prendre l'entrée d'utilisateur:
EncryptPasswordDlgController encPassController = [[EncryptPasswordDlgController alloc] init];
[encPassController showWindow:self];
NSString *inputPassword = [encPassController password];
ici est mon NSWindowController code objet:
#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
Après avoir cliqué sur le bouton OK ou annuler bouton, la méthode IBAction respective est appelée et est exécutée comme requis, c'est-à-dire qu'elle affiche la fenêtre prenant l'entrée de l'utilisateur à partir du champ de texte et en cliquant sur ok elle met également le mot de passe à jour. Mais après avoir terminé l'exécution de la méthode clickAc IBAction, il devrait retourner à myController.mm et récupérer le mot de passe en exécutant l'instruction suivante "NSString * inputPassword = [mot de passe encPassController];" ce qui ne se passe pas. S'il vous plaît, quelqu'un peut-il suggérer un moyen de s'attaquer à cette situation?
EDIT:
Merci Bob pour la réponse. J'ai maintenant compris ce que mon erreur était. donc j'ai essayé la méthode de notification en utilisant une boucle while comme le montre:
while(isPasswordReceivedForEncryption == NO)
{
sleep(10000);
//continue;
}
au milieu de mon programme afin d'attendre la notification arrive et définit la variable bool true. Mais maintenant, le problème est qu'il va en boucle infinie et mon application est coincé.
Y at-il rien de tel que l'équivalent MFC où il attend directement l'entrée de l'utilisateur. Vraiment, est-ce si difficile de créer une fenêtre et d'obtenir des commentaires de la part de l'utilisateur ou est-ce qu'il me manque vraiment quelque chose ici?
Vous avez déjà posé cette question à http://stackoverflow.com/questions/1337591/nswindowcontroller-program-execution.Essayez d'éviter de poster une nouvelle question à chaque fois. utilisez votre fil existant autant que possible. –