【问题标题】:iOS - EncodeWithCoder - Encode NiliOS - EncodeWithCoder - 编码无
【发布时间】:2014-05-18 02:25:28
【问题描述】:

我有一个属性可能为 nil 的对象。我应该如何在 encodeWithCoder(和 decodeWithCoder)中实现这个?

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

【问题讨论】:

    标签: ios nscoding uidocument


    【解决方案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。)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-16
      相关资源
      最近更新 更多