iOS - EncodeWithCoder - 编码无
Posted
技术标签:
【中文标题】iOS - EncodeWithCoder - 编码无【英文标题】:iOS - EncodeWithCoder - Encode Nil 【发布时间】:2014-05-18 02:25:28 【问题描述】:我有一个属性可能为 nil 的对象。我应该如何在 encodeWithCoder(和 decodeWithCoder)中实现这个?
- (void)encodeWithCoder:(NSCoder *)aCoder
[aCoder encodeObject:_duration forKey:kDuration]; //_duration could be nil
【问题讨论】:
【参考方案1】:Aaron 的解决方案简洁明了,可以清楚地传达正在发生的事情。但是,我找不到任何信息,是否可以将nil
传递给encodeObject:forKey:
,因此我对其进行了测试。事实证明你可以安全地这样做(如果我遗漏了什么,请纠正我)。
所以你可以简单地说
- (void)encodeWithCoder:(NSCoder *)aCoder
[aCoder encodeObject:_duration forKey:kDuration]; //_duration could be nil
即使 _duration 为 nil,这也会起作用。在这种情况下,它根本不会将密钥写入编码器。
【讨论】:
请注意,这会将_duration
的旧值覆盖为nil
,这可能是不可取的。也就是说,您可能希望仅在值存在时对其进行编码以保留较旧的值。【参考方案2】:
- (void)encodeWithCoder:(NSCoder *)aCoder
if (_duration)
[aCoder encodeObject:_duration forKey:kDuration]; //_duration could be nil
(如果密钥不存在,您的对象将在解码时为nil
。)
【讨论】:
以上是关于iOS - EncodeWithCoder - 编码无的主要内容,如果未能解决你的问题,请参考以下文章
如何 initwithCoder 和 encodewithCoder 获取指针的值
方法 Swizzle encodeWithCoder/initWithCoder
符合 Codable 协议的类因 encodeWithCoder 失败:无法识别的选择器发送到实例
当视图包含带有自定义图像的 UIButton 时,UIViewController encodeWithCoder 失败
-[UICGColor encodeWithCoder:], /SourceCache/UIKit/UIKit-3318/UIColor.m 中的断言失败
Swift 3 Xcode 8 - SwiftValue encodeWithCoder - 发送到实例的无法识别的选择器