强制Nib加载器使用init?(和:)用于iOS中NSObject的自定义子类

时间:2017-08-01 17:48:28

标签: ios objective-c swift xib nib

我添加到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!

1 个答案:

答案 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

执行相同操作