2010-10-15 3 views
47

J'ai la méthode suivante pour ma classe qui a l'intention de charger un fichier nib et instancier l'objet:Objectif C - Comment utiliser la méthode initWithCoder?

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

Comment peut-on 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]; 

Répondre

40

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 initialisation 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 peut initialiser l'objet de façon standard, par exemple

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

ma question principale est: "donc basé sur cette méthode init comment instancier un objet de cette classe?" – aryaxt

+0

Ces méthodes doivent être définies si vous utilisez l'objet pour la sérialisation et la désérialisation. Vous pouvez initialiser l'objet en utilisant la méthode d'initialisation normale – SegFault

+0

merci beaucoup – pnizzle

Questions connexes