2009-04-20 7 views
3

J'ai une simple application basée sur le document Cocoa qui agit comme un spectateur pour les fichiers .wav, pour faire un peu d'analyse de fréquence. J'aimerais pouvoir exporter les données glanées à partir de fichiers ouverts vers des fichiers CSV pour une analyse plus approfondie dans d'autres programmes.Quelle est la méthode acceptée pour implémenter la fonctionnalité d'exportation dans une application Cocoa basée sur des documents?

Le cadre d'application basé sur des documents à Cocoa permet de passer outre

- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError 

pour mettre en œuvre la valeur par défaut Enregistrer/Enregistrer sous ... flux de travail, mais je ne veux pas écrire les fichiers que j'ouvert. La chose la plus évidente est d'implémenter un workflow d'export dans mon document, de présenter une feuille de sauvegarde, de construire des NSData, et de l'écrire dans un chemin de fichier, mais il n'y a pas de moyen évident de connecter une sortie MainMenu plume à une action sur un contrôleur de document.

Alors, quel est le moyen accepté pour implémenter une telle fonctionnalité dans une application Cocoa basée sur des documents?

Répondre

3

Vous pouvez créer une nouvelle action dans l'objet "First Responder" de MainMenu.nib, appelée "export:", et vous y connecter. Ensuite, implémentez une méthode export: dans votre sous-classe de document. Cela appellera votre méthode. La raison pour laquelle cela fonctionne est que les messages envoyés à l'objet premier répondeur magique passent par toute la chaîne du répondeur, à la recherche d'un objet qui les gère. L'un des éléments de cette chaîne répondeur est le document, et donc lorsque le contrôle, la vue, la vue d'ensemble, la fenêtre, etc., actuellement sélectionnés, ne traitent pas le message, le document a une chance. (Le contrôleur de document est également sur cette chaîne, vous pouvez donc l'utiliser aussi.)

Regardez Apple's responder chain docs - la figure 1.10 couvre ce chemin particulier.

+0

Ah! Je savais qu'il me manquait quelque chose d'évident. Merci! – qwzybug

Questions connexes