web-dev-qa-db-fra.com

Objectif C - Comment utiliser la méthode initWithCoder?

J'ai la méthode suivante pour ma classe qui a l'intention de charger un fichier nib et d'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];
47
aryaxt

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 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 la méthode standard de l'objet, c'est-à-dire

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

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

Il s'agit d'une méthode pour écrire des objets sur des flux (comme des fichiers, des sockets) et pouvoir les récupérer plus tard ou dans un endroit différent.

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

17
Jack