iOS - EncodeWithCoder - 编码无

riz*_*zes 7 nscoding ios uidocument

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

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

Joh*_*rug 13

Aaron的解决方案很干净,清楚地传达了正在发生的事情.但是,我找不到任何信息,是否可以传递nilencodeObject:forKey:我,所以我测试了它.事实证明你可以安全地这样做(如果我遗漏了某些东西,请纠正我).

所以你可以简单地说

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

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

  • 请注意,这将用“nil”*覆盖*“_duration”的旧值,这可能是不可取的。也就是说,您可能只想对存在的值进行编码以保留较旧的值。 (2认同)

Aar*_*ger 7

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

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