我添加到XIB自定义NSObject,将其类设置为符合NSCoding协议的NSObject子类。通过初始化UINibLoader使用init()。
根据iOS的Apple资源编程指南,任何符合NSCoding协议的对象都将发送-initWithCoder:message。
是否有可能,如果它是如何强制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!
。
答案 0 :(得分:0)
试试这个:
要强制它使用另一个init方法,请将-initWithCoder
方法添加到子类并覆盖它以调用您自己的init方法,如下所示:
Objective-C:(有人请为我添加翻译给Swift)
-(instancetype)initWithCoder(NSCoder*)aDecoder{
self = [super initWithCoder:aDecoder];
if(self){
[self customInit];
}
return self;
}
这样当调用-initWithCoder
时,你的init方法最终会被调用。对-initWithFrame