47 votes

Objective C - Comment utiliser la méthode initWithCoder?

J'ai la méthode suivante pour ma classe qui veut charger un fichier nib et instancier l'objet:

 - (id)initWithCoder:(NSCoder*)aDecoder 
{
    if(self = [super initWithCoder:aDecoder]) {
        // Do something
    }
    return self;
}
 

Comment instancier un objet de cette classe? Qu'est-ce que c'est NSCoder ? Comment puis-je le créer?

     MyClass *class = [[MyClass alloc] initWithCoder:aCoder];
 

41voto

SegFault Points 726

Vous devez également définir la méthode suivante comme suit:

 - (void)encodeWithCoder:(NSCoder *)enCoder {
    [super encodeWithCoder:enCoder];

    [enCoder encodeObject:instanceVariable forKey:INSTANCEVARIABLE_KEY];

    // Similarly for the other instance variables.
    ....
}
 

Et dans la méthode initWithCoder, initialisez-vous comme suit:

 - (id)initWithCoder:(NSCoder *)aDecoder {

   if(self = [super initWithCoder:aDecoder]) {
       self.instanceVariable = [aDecoder decodeObjectForKey:INSTANCEVARIABLE_KEY];

       // similarly for other instance variables
       ....
   }

   return self;
}
 

Vous pouvez initialiser l'objet de manière standard, c'est-à-dire

 CustomObject *customObject = [[CustomObject alloc] init];
 

18voto

Jack Points 61503

La classe NSCoder est utilisée pour archiver / désarchiver (marshal / unmarshal, sérialiser / désérialiser) des objets.

C'est une méthode pour écrire des objets sur des flux (comme des fichiers, des sockets) et pouvoir les récupérer plus tard ou à un endroit différent.

Je vous suggère de lire http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/Archiving/Archiving.html

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X