readFromData:ofType:error:, Exception de NSKeyedUnarchiver incomprehensible...

Nebuchad34Nebuchad34 Membre
21:53 modifié dans API AppKit #1
Bonjour,

J'essayer de désarchiver un fichier créé avec la précédente version de mon programme.

La précédente version n'a aucun soucis pour désarchiver l"archive en faisant appel à 
- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName error:(NSError **)outError<br />{<br />	NSMutableDictionary *savedInfos = nil;<br />	@try {<br />		savedInfos = [NSKeyedUnarchiver unarchiveObjectWithData:data];<br />	}


Mais si j'essaye de faire la même chose dans la nouvelle version, le NSKeyedUnarchiver lève une exception lorsqu'il s'agit du type de fichier associé à  l'ancienne version, et je ne comprends vraiment pas pourquoi dans un cas il arrive à  désarchiver et pas dans l'autre....

Réponses

  • zoczoc Membre
    21:53 modifié #2
    Euhhh, une classe qui a changé de nom où à  disparu ? ou une variable d'instance qui a changé de type ?
  • Nebuchad34Nebuchad34 Membre
    21:53 modifié #3
    AH oui, zut, j'oubliais qu'il me fallait récupérer mes anciennes classes.  Des fois je me demande ...:crackboom:-

    Quel boxons ça fait juste pour pouvoir réouvrir d'anciens fichiers...
  • Nebuchad34Nebuchad34 Membre
    21:53 modifié #4
    Très bien, je suis arrivé à  mes fins, mais il me reste encore un petit problème.
    Comment faire pour que l'utilisateur ne puisse pas enregistrer dans le fichier avec l'ancienne extension ?

    j'explique :

    soit la nouvelle extension .newext
    et l'ancienne .oldext

    ma classe NSDocument sait maintenant lire les .oldext, mais je veux que, lorsque l'utilisteur fait un "fichier > enregistrer", il se voit proposer un NSSavePanel (une boite de dialogue d'enregistre sous en somme),
    plutôt que d'écraser le fichier original qui est à  la mauvaise extension.

    Comment faire ?
  • NseaProtectorNseaProtector Membre
    21:53 modifié #5
    Je ferais un NSLog sur le type de fichier dans la méthode de sauvegarde du NSDocument et si tu vois bien passer .oldext, place un selecteur ou un if pour renvoyer la sauvegarde .oldext en "enregistrer sous" ou pour remplacer .oldext en .newext sans rien demander.
  • Nebuchad34Nebuchad34 Membre
    21:53 modifié #6
    C'est bon, j'ai fini par trouver en sous classant la méthode saveDocument:
    et en utilisant la méthode filType pour changer le comportement en fonction du type de fichier.
  • NseaProtectorNseaProtector Membre
    21:53 modifié #7
    Ok, et bien c'est cool si c'est résolu, et ça nous donne une voie si l'on cherche a faire la même chose. D'ailleurs il y'a surrement un truc pour enregistrer un numéro de version dans le fichier sans avoir a changer le type d'extension de fichier a chaque nouvelle version.
Connectez-vous ou Inscrivez-vous pour répondre.