2010-10-15 15 views
47

Mam następujący sposób dla mojej klasy, która zamierza załadować plik nib i instancję obiektu:Cel C - Jak korzystać z metody initWithCoder?

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

jaki sposób jeden instancji obiektu tej klasy? Co to jest NSCoder? Jak mogę to zrobić?

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

Odpowiedz

40

trzeba także określić w następujący sposób w następujący sposób:

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

    [enCoder encodeObject:instanceVariable forKey:INSTANCEVARIABLE_KEY]; 

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

A w metodzie initWithCoder zainicjować w następujący sposób:

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

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

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

    return self; 
} 

Ty można zainicjować obiekt w standardowy sposób, tj.

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

moje główne pytanie brzmi: "tak na podstawie tej metody init jak utworzyć instancję obiektu tej klasy?" – aryaxt

+0

Te metody należy zdefiniować, jeśli używasz obiektu do serializacji i deserializacji. Możesz zainicjować obiekt za pomocą zwykłej metody init – SegFault

+0

dziękuję bardzo – pnizzle