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.
_duration
withnil
, which may not be desirable. That is, you might want to encode the value only if it's present in order to preserve an older value. – Structuralism