Deep copy d'un objet

UniXUniX Membre
11:41 modifié dans API AppKit #1
Salut.

Je voudrais faire une deep copy d'un objet perso. Comme il contient un NSMutableArray, j'ai vu l'astuce d'Eddy58, et j'ai donc fait :
MaClasse *objetCibleCopie = [NSUnarchiver unarchiveObjectWithData:[NSArchiver archivedDataWithRootObject:objetCible]];


L'objetCible et les objets contenus dans le NSMutableArray implémentent tous le protocole NSCoding (je l'utilise par ailleurs pour archiver tout ça ...). Là , il me met :
encodeObject:forKey: only defined for abstract class. Define -[NSArchiver encodeObject:forKey:]!


Pfff, il est jamais content celui-là  ..... >:( ;)

Réponses

  • fouffouf Membre
    11:41 modifié #2
    Ton problème a lieu à  cause de la coexistence parallèle des NSUn/Archiver et NSKeyedUn/Archiver. Dans ton encodeWithCoder: j'imagine que tu as fait des encodeObject:forKey: & co, méthodes qui ne sont définies que dans les NSKeyedArchiver. Or tu fais appel à  NSArchiver. La solution à  ton problème serait donc de remplacer NSArchiver et NSUnarchiver par, respectivement, NSKeyedArchiver et NSKeyedUnarchiver.

    Malheureusement, les keyedArchiver ne sont disponibles qu'avec 10.2 et ultérieur. Donc, si tu veux que ton appli supporte 10.1, il faut que dans ton encodeWithCoder: et initWithCoder: tu testes si il s'agit d'un keyedArchiver ou pas grace à  la méthode allowsKeyedCoding et que tu agisses en conséquence (remplacer les encodeObject:forKey: par des encodeObject: "tout simple").

    Bon code ;)
  • UniXUniX Membre
    11:41 modifié #3
    Pil poil 

    Et vous savez le prire dans cette histoire ? Ben c'est la 2ème fois que je me fais avoir pour la même connerie .....
    Promis, il n'y en aura pas 3 !

    Merci fouf.
  • LeChatNoirLeChatNoir Membre, Modérateur
    11:41 modifié #4
    des promesses, des promesses...

    Tu sais ce qu'on dit : "Jamais 2 sans 3"...  ;)
  • elfelf Membre
    11:41 modifié #5
    Plutôt

    @Jamais 2 sans trois

    A moins que tu veuille faire une chaà®ne de type C... :-* <3 :p :p :kicking: :(renaud): :o
Connectez-vous ou Inscrivez-vous pour répondre.