强制 Nib loader 使用 init?(with:) for custom subclass of NSObject in iOS
Posted
技术标签:
【中文标题】强制 Nib loader 使用 init?(with:) for custom subclass of NSObject in iOS【英文标题】:Forcing Nib loader use init?(with:) for custom subclass of NSObject in iOS 【发布时间】:2017-08-01 17:48:28 【问题描述】:我添加到一个 XIB 自定义 NSObject,将其类设置为我的符合 NSCoding 协议的 NSObject 子类。通过初始化 UINibLoader 使用 init()。
根据 Apple 在 ios 中的资源编程指南,任何符合 NSCoding 协议的对象都将发送 -initWithCoder: 消息。
是否有可能,如果是如何强制 UIKit 使用 init?(with:) 用于 NSObject 的自定义子类?
UPD:我的班级:
class SomeClass: NSObject, NSCoding
static var sharedSomeClass: SomeClass =
return SomeClass()
()
required init?(coder aDecoder: NSCoder)
super.init(coder:aDecoder)
override func encode(with aCoder: NSCoder)
super.encode(with: aCoder)
override func awakeAfter(using aDecoder: NSCoder) -> Any?
return SomeClassManager.sharedSomeClass
在 XIB 中,我连接到 ViewController 中的 @IBOutlet var someObject: SomeClass!
。
【问题讨论】:
你能分享你的示例代码吗? @AnandKore 更新问题 【参考方案1】:试试这个:
要强制它使用另一个 init 方法,请将 -initWithCoder
方法添加到您的子类并覆盖它以调用您自己的 init 方法,如下所示:
Objective-C:(请有人帮我添加到 Swift 的翻译)
-(instancetype)initWithCoder(NSCoder*)aDecoder
self = [super initWithCoder:aDecoder];
if(self)
[self customInit];
return self;
这样当-initWithCoder
被调用时,你的init 方法最终会被调用。对-initWithFrame
做同样的事情
【讨论】:
@antonsergeev88 也对-initWithFrame
方法执行相同的覆盖方法以上是关于强制 Nib loader 使用 init?(with:) for custom subclass of NSObject in iOS的主要内容,如果未能解决你的问题,请参考以下文章
手动加载 nib 文件时未调用 init 或 initWithNibName
为啥不调用基于 nib 的自定义表格单元格的 init 方法