rizzes
rizzes

Reputation: 1542

iOS - EncodeWithCoder - Encode Nil

I have an object that has a property that might be nil. How should I implement this in encodeWithCoder (and decodeWithCoder)?

- (void)encodeWithCoder:(NSCoder *)aCoder
{ 
    [aCoder encodeObject:_duration forKey:kDuration]; //_duration could be nil
}

Upvotes: 9

Views: 3431

Answers (2)

Johannes Fahrenkrug
Johannes Fahrenkrug

Reputation: 44808

Aaron's solution is clean and clearly communicates what's going on. I couldn't find any information, however, whether it's OK to pass nil to encodeObject:forKey:, so I tested it. It turns out that you can safely do so (please correct me if I'm missing something).

So you can simply say

- (void)encodeWithCoder:(NSCoder *)aCoder
{ 
    [aCoder encodeObject:_duration forKey:kDuration]; //_duration could be nil
}

Even when _duration is nil, this will work. It will simply not write the key to the coder in that case.

Upvotes: 14

Aaron Brager
Aaron Brager

Reputation: 66292

- (void)encodeWithCoder:(NSCoder *)aCoder
{ 
    if (_duration) {
        [aCoder encodeObject:_duration forKey:kDuration]; //_duration could be nil
    }
}

(Your object will be nil on decode if the key is not present.)

Upvotes: 7

Related Questions