存储在序列化视图中的子类 UILabel 不存储自定义变量

Posted

技术标签:

【中文标题】存储在序列化视图中的子类 UILabel 不存储自定义变量【英文标题】:Subclassed UILabel stored within serialized view not storing custom vars 【发布时间】:2011-12-19 11:55:21 【问题描述】:

所以,我有一个正在序列化并存储在文件中的视图。在该视图中,n 是 UILabel 的子类,唯一的区别是 live 属性。我在 UILabel 子类中有 initwithcoder 和 encodewithcoder,但我仍然无法在标签中获取自定义变量。我已经包含了我的子类的方法和以下内容。任何帮助表示赞赏。

自定义UILabel:

- (id) initWithCoder:(NSCoder *)decoder

    self = [super initWithCoder:decoder];

    if (self != nil) 
        self.live = [decoder decodeBoolForKey:@"live"];
    
    return self;


-(void)encodeWithCoder:(NSCoder *)aCoder 
    [aCoder encodeBool:self.live forKey:@"live"];

因为我只是取消归档包含标签的视图,所以我假设 ios 不会取消归档自定义标签?

谢谢

【问题讨论】:

我不确定您为什么要序列化视图。正确的做法是序列化变量(可能在 plist 中),然后在以后需要时实例化视图。 如果您明白我的意思,请显示从外部归档/取消归档标签的代码。此外,您缺少对 super encodeWithCoder 的调用。 而且,不出所料,这就是我所缺少的,谢谢。现在一切正常。 unarchiver 只需从文件中获取字节并从数据中加载视图。 @jrturton,如果您将其添加为答案,我会将其标记为正确并推荐您。再次感谢您! 【参考方案1】:

您错过了对[super encodeWithCoder:aCoder] 的呼叫。这将导致一个不正确的序列化对象,我不确定后果是什么,但您似乎找到了其中之一!

【讨论】:

似乎结果是它返回了一个对象,但只有我选择反序列化的对象,而且苹果没有放入标签等花哨的东西。干杯

以上是关于存储在序列化视图中的子类 UILabel 不存储自定义变量的主要内容,如果未能解决你的问题,请参考以下文章

自定义 UIView 子类添加 nib 子视图

为啥嵌套视图中的 UILabel 不接收触摸事件/如何测试响应者链?

如何提高表视图中的 UILabel 性能?

自定义 UICollectionViewCell 中的 UILabel 始终为空,无法更新文本

如何创建一行 UILabel 的“容器”视图?

如何大写来自 Swift 子类的 UILabel 的文本属性