views:

79

answers:

2

I have the following method for my class which suppose to load the nib file and instantiate the object.

- (id)initWithCoder:(NSCoder*)aDecoder 
{
    if(self = [super initWithCoder:aDecoder]) 
 {
        // Do something
    }
    return self;
}
  • so based on this init method how do u instantiate an object of this class?
  • The init method requires a parameter (NSCoder), so what is this nscoder? how can i create it?

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

A: 

The NSCoder class is used to archive/unarchive (marshal/unmarshal, serialize/deserialize) of objects.

This is a method to write objects on streams (like files, sockets) and being able to retrieve them later or in a different place.

I would suggest you to read http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/Archiving/Archiving.html

Jack
+1  A: 

You also need to define the following method as follows:

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

    [enCoder encodeObject:instanceVariable forKey:INSTANCEVARIABLE_KEY];

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

And in the initWithCoder method initialize as follows:

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

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

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

    return self; }

You can initialize the object standard way i.e CustomObject *customObject = [[CustomObject alloc] init];

SegFault
my main question is: "so based on this init method how do u instantiate an object of this class?"
aryaxt
These methods need to be defined if you are using the object for serializing and deserializing. You can initialize the object using normal init method
SegFault