2017-08-01 10 views
1

XIBカスタムNSObjectに追加し、そのクラスをNSCodingプロトコルに準拠するNSObjectのサブクラスに設定します。初期化によって、UINibLoaderはinit()を使用します。Nibローダーを強制的に使用するiOSのNSObjectのカスタムサブクラスを使用する

iOSのAppleのリソースプログラミングガイドによると、NSCodingプロトコルに準拠するオブジェクトは、-initWithCoder:メッセージを送信します。

NSObjectのカスタムサブクラスに対してUIKitにinitを使用させるにはどうすればいいですか?

UPD:私のクラス:私はのViewControllerに@IBOutlet var someObject: SomeClass!に接続XIBで

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 

} 

}

+0

あなたのサンプルコードを共有できますか? –

+0

@AnandKore更新された質問 – antonsergeev88

答えて

0

これを試してみてください:

はそうのような独自のinitメソッドを呼び出すために、別のinitメソッドを使用するように強制し、あなたのサブクラスに-initWithCoderメソッドを追加し、それを上書きするには:

のObjective-C:(誰かが

-(instancetype)initWithCoder(NSCoder*)aDecoder{ 

    self = [super initWithCoder:aDecoder]; 

    if(self){ 
     [self customInit]; 
    } 

    return self; 
} 

-initWithCoderが呼ばれたそのように、あなたのinitメソッドが呼び出されることになります)私のためスウィフトに翻訳してください追加します。 -initWithFrame

+0

すでにこのメソッドは呼び出されていません – antonsergeev88

+0

@ antonsergeev88も同様に '-initWithFrame'メソッドと同じオーバーライド方法を行います – FightOn

関連する問題