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];
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];
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