Objective C - How do I use initWithCoder method?

前端 未结 2 981
再見小時候
再見小時候 2020-12-02 18:23

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 =         


        
相关标签:
2条回答
  • 2020-12-02 18:39

    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

    0 讨论(0)
  • 2020-12-02 18:44

    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];
    
    0 讨论(0)
提交回复
热议问题