Objective C - How do I use initWithCoder method?

十年热恋 提交于 2019-11-26 15:47:35

问题


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

回答1:


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



回答2:


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



来源:https://stackoverflow.com/questions/3943801/objective-c-how-do-i-use-initwithcoder-method

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!