gpt4 book ai didi

macos - 如何将符合 NSCoding 的对象克隆到其子类中?

转载 作者:行者123 更新时间:2023-12-03 17:48:37 29 4
gpt4 key购买 nike

我有一个 NSPopUpButtonCell 的自定义子类,以便我可以覆盖其 drawBezelWithFrame:inView: 方法。

目前,我必须使用 initTextCell:pullsDown: 创建一个新实例,然后手动复制其所有属性。这相当乏味且容易出错,因为我可能会丢失一些属性。

我想知道是否可以使用 initWithCoder: 来完成此任务。我想我应该能够将现有 NSPopUpButtonCell 实例中的数据归档到 NSCoder 对象中,例如到 NSKeyedArchiver 中,然后将该数据归档回我的 NSPopUpButtonCell 子类中。但我不知道如何实现这一点。

最佳答案

如果您的子类所做的只是重写方法,即它不添加其他字段,那么您可以混合原始 NSPopupButtonCell 的类或其副本,因此它变成了实例你的子类。

Apple 使用此技术实现 KVO,在这种情况下使用动态生成的子类。如果您的情况子类是静态的,则更容易,代码的概要是:

object_setClass(<an NSPopupButtonCell instance>,
[<your subclass> class]);

如果您可以安全地更改原始实例上的类,那么这根本不涉及对象创建或复制。

请记住,仅当子类仅更改行为时才可以执行此操作

有关其他解释,请参阅 this answer .

HTH

关于macos - 如何将符合 NSCoding 的对象克隆到其子类中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37417921/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com