[résolu] Comment ouvrir une sauvegarde depuis le Finder?
Herve
Membre
Bonjour,
J'ai fait une appli sans NSDocument. J'ai fait la procédure de sauvegarde avec NSKeyedArchiver + NSCoder.
On peut ouvrir les sauvegardes depuis l'application avec un menu "Open" qui marche super. Lorsqu'on fait contrôle+click sur la sauvegarde dans le finder, l'OS indique bien la bonne application.
Mais si je double clique sur cette sauvegarde, l'application est bien lancée mais un message d'alerte apparaà®t disant que elle ne peut ouvrir ce type de fichier (qui a une extension propre, bien sûr). L'application est correctement initialisée et fonctionne très bien ensuite.
J'ai essayé :
- de créer artificiellement un type de document dans "InfoPList". Je m'y suis peut-être mal pris, mais cela n'a pas marché.
- d'implémenter une méthode "awakeFromNib" en plus de la méthode "init" dans le "AppController". Mais comment lui dire le nom de l'archive? La classe sauvegardant les données est une classe "MesDonnees" indépendante. Je ne trouve pas, j'ai pensé à quelque chose comme @selector...
Ce doit être simple, mais pour l'instant je sèche. Quelqu'un ici connaà®trait l'astuce peut-être? Merci.
J'ai fait une appli sans NSDocument. J'ai fait la procédure de sauvegarde avec NSKeyedArchiver + NSCoder.
On peut ouvrir les sauvegardes depuis l'application avec un menu "Open" qui marche super. Lorsqu'on fait contrôle+click sur la sauvegarde dans le finder, l'OS indique bien la bonne application.
Mais si je double clique sur cette sauvegarde, l'application est bien lancée mais un message d'alerte apparaà®t disant que elle ne peut ouvrir ce type de fichier (qui a une extension propre, bien sûr). L'application est correctement initialisée et fonctionne très bien ensuite.
J'ai essayé :
- de créer artificiellement un type de document dans "InfoPList". Je m'y suis peut-être mal pris, mais cela n'a pas marché.
- d'implémenter une méthode "awakeFromNib" en plus de la méthode "init" dans le "AppController". Mais comment lui dire le nom de l'archive? La classe sauvegardant les données est une classe "MesDonnees" indépendante. Je ne trouve pas, j'ai pensé à quelque chose comme @selector...
Ce doit être simple, mais pour l'instant je sèche. Quelqu'un ici connaà®trait l'astuce peut-être? Merci.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
as tu essayé les méthodes du "delegate" de l'application comme:
application:openFile ou application:openFiles: ?
Je ne sais pas si cela correspond à tes besoins... mais à tout hasard voici la documentation.
Je dois avoir du mal à l'employer, pour l'instant le problème est le même.
J'ai fait cela :
(mesDonnees implémentent initWithCoder)
L'application est ouverte mais l'archive n'est pas chargée. L'exemple donné dans la doc Apple semble bien utiliser cette méthode pour initialiser l'application. Impossible d'utiliser "awakeFromNib" si je ne peux utiliser le nom du fichier dans la méthode de toutes façon, puisque j'en ai besoin pour
Bon, si quelqu'un connaà®t l'astuce, je suis preneur, merci.
qui n'ont visiblement pas lieu d'être. Je n'ai gardé que les NSKeyedUnarchiver. Cette méthode est déclarée dans l'entête de la classe. Peut-être faut-il la mettre dans le main? (pas essayé, mais je vois plus rien...)
Bonne nuit!
ça, c'est du grand n'importe quoi. Il ne s'agit pas d'une méthode d'init, mais d'une méthode déléguée de NSApplication.
Quand un fichier est déposé, l'application appelle la méthode -application:openFile: de son délégué (NSApplication possède une outlet delegate, regarde dans IB, tu verras que l'outlet est connectée à l'instance de AppDelegate).
-awakeFromNib est appelée dans deux cas:
- pour un objet présent dans un nib, quand il est instancié
- pour un objet qui désarchive un nib (NSWindowController, NSViewController...) quand les objets du nib ont été instanciés.
Il ne faut pas l'utiliser dans cette situation car tu peux très bien avoir l'application lancée (donc avoir le nib désarchivé) et double-cliquer le fichier.
Pourquoi ne pas utiliser NSDocument ? Il a beaucoup d'avantages:
- une fenêtre par fichier
- un UndoManager par fichier
- les documents apparaissent dans Fichier > Ouvrir fichier récent
- on peut déplacer ou renommer un fichier dans le Finder pendant qu'il est ouvert
etc.
Là , tu es en train de réinventer la roue pour faire quelque chose de moins bien.
La méthode "delegate" par connexion dans IB a marché. Merci.
En fait, en particulier parce que j'utilise dans cette appli un menu modifiable, je n'ai aps voulu travailler à partir de "Document Based Application". Il faut par contre que je retravaille cette classe NSDocument. Visiblement, je ne l'ai pas bien comprise.
Merci encore Lexxis et Céroce : problème résolu.