Reputation: 1542
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
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
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