存储在序列化视图中的子类 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 不存储自定义变量的主要内容,如果未能解决你的问题,请参考以下文章
为啥嵌套视图中的 UILabel 不接收触摸事件/如何测试响应者链?