2009-08-30 4 views
0

Je tente de charger une plume à partir d'un constructeur C++ avec Objective C++. J'ai recherché et trouvé assez d'exemples pour obtenir du code ensemble mais il n'affiche pas la fenêtre. Ou toutes les fenêtres d'ailleurs.Chargement de la plume et affichage de la fenêtre dans Objective C++

Voici un exemple de contructor:

JokeSystem::JokeSystem() : fileSystem("/Library/Application Support/Jokes/") 
{ 
    try 
    { 
     randSystem = new RandSelect<std::string> 
            (fileSystem.getAllFileContents("%\n")); 
    } 
    catch (std::ifstream::failure) 
    { 
     NSWindowController * errorWindowControl = [[NSWindowController alloc] 
             initWithWindowNibName:@"ErrorWindow"]; 
     [errorWindowControl showWindow: nil]; 
    } 
} 

Le but du contructor est de charger le contenu d'un répertoire dans une chaîne. Ce que j'essaie de faire est d'afficher la fenêtre d'erreur lorsque les fichiers ne parviennent pas à ouvrir.

ErrorWindow.nib a une seule fenêtre avec un bouton OK et un NSTextView pour l'erreur, j'ai mis en place un NSWindowController dans la plume et je l'ai connecté à la fenêtre.

Mon seul lien a été que la plupart des exemples montrent cela [errorWindowControl showWindow: self]; plutôt que showWindow: nil mais comme il s'agit d'un constructeur C++, il n'a pas self et this ne fonctionne pas.

Si cela est important, ce constructeur est appelé à partir de la méthode awakeFromNib du MainMenu.nib principal NSObject.

Remerciements

Répondre

3

Un peu bizarre pour approcher Cocoa. Je vous encourage à prendre du recul, à apprendre Objective-C, puis à écrire votre application avec une couche Cocoa UI basée sur Objective-C au-dessus du magasin de sauvegarde ou de la couche modèle que vous avez.

Dans tous les cas, il n'y a rien de particulièrement mauvais avec ce code (sauf pour le design impair).

La première chose à vérifier est la valeur de retour de -initWithWindowNibName :. ErrorWindowControl est-il réellement non-nul? Si elle est nulle, le NIB n'a pas pu être chargé.

Comment écrivez-vous l'application Cocoa? Pack d'applications standard en utilisant Xcode, j'espère?

De même, vous ne devez pas coder en dur le chemin d'accès à/Library/Application Support /. En fait, votre application ne doit pas utiliser ce répertoire comme seul emplacement de stockage; De nombreux utilisateurs n'auront pas accès en écriture à ce répertoire et ne pourront pas installer votre application sans accès administrateur.

+0

J'ai testé errorWindowControl, et il n'était pas nul. Le Objective-C qui est dans le programme est un frontal pour MainMenu.nib et exécute une fonction C++ à partir de cette classe. C'est pourquoi je crée la fenêtre ici, parce que le constructeur ci-dessus est utilisé au début du programme, et cela affiche une fenêtre et quitte le programme. Le répertoire est ~/Library/Application Support mais j'ai utilisé ceci pour charger le répertoire incorrect pour vérifier ma gestion des erreurs. J'utilise un ensemble d'applications Cocoa standard dans Xcode. Merci –

Questions connexes