iOS - EncodeWithCoder - 编码无

时间:2014-05-18 02:25:29

标签: ios nscoding uidocument

我有一个对象,其属性可能为零。我应该如何在encodeWithCoder(和decodeWithCoder)中实现它?

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

2 个答案:

答案 0 :(得分:12)

Aaron的解决方案很干净,清楚地传达了正在发生的事情。我无法找到任何信息,但是,将nil传递给encodeObject:forKey:是否可以,所以我对其进行了测试。事实证明你可以安全地这样做(如果我错过了什么,请纠正我。)

所以你可以简单地说

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

即使_duration为零,这也行。在这种情况下,它根本不会将密钥写入编码器。

答案 1 :(得分:7)

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

(如果密钥不存在,您的对象将在解码时nil。)