50

I have the following method for my class which intends to load a nib file and instantiate the object:

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

How does one instantiate an object of this class? What is this NSCoder? How can I create it?

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

2 Answers 2

42

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];
Sign up to request clarification or add additional context in comments.

5 Comments

my main question is: "so based on this init method how do u instantiate an object of this class?"
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
But... how do you invoke the initWithCoder method?
I think you are referring to [NSKeyedUnarchiver unarchiveObjectWithData:<#(NSData *)#>]. Check the class methods of NSKeyedUnarchiver for reading data
@Ev You don't call initWithCoder, this method gets called as the result of loading a view from nib or storyboard.
18

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.