2016-03-22 4 views
1

今私は経由して、nibファイルで別のViewControllerを呼び出しrootViewControllerを持っている:ペン先/ XIBオブジェクトのライフサイクル

このinitがある
self.popViewController = PopViewController(nibName: "PopUpViewController_iPhone6Plus", bundle: bundle) 

override public init(nibName nibNameOrNil: String!, bundle nibBundleOrNil: NSBundle!) { 
    super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
} 

rootViewControllerがPopViewControllerをインスタンス化した後、それがもたらしますそれを経由して:

self.popViewController.showInView(self, animated: true) 

ここでshowInViewは:

func showInView(myRootViewController : MyRootViewController!, animated: Bool) 
{ 
    self.myRootViewController = myRootViewController 
    myRootViewController.view.addSubview(self.view) 
    myTextField.delegate = self 

    if animated 
    { 
     self.showAnimate() 
    } 
} 

ここで、myTextFieldはPopViewControllerのIBOutletです。私はmyRootViewController.view.addSubview(self.view)の前にmyTextField.delegate = selfを置くとエラーが発生することを認識しました。fatal error: unexpectedly found nil while unwrapping an Optional valueですが、それ以降はすべてが問題ありません。

私はNib filesのためにドキュメンテーションを見てきましたし、私の質問は次のとおりです。

は私がmyRootViewController.view.addSubview(self.view)myTextField.delegate = selfを入れたときにIBOutletsは、ペン先の前に接続されませんので、私はエラーを取得していた理由ですビューが表示されますか?また

:エラーをスロー self.popViewController = NSBundle.mainBundle().loadNibNamed("PopViewController_iPhone6", owner: PopViewControllerSwift.self, options: nil).first as! PopViewControllerSwift

:NIBとビューコントローラをInit'ing

'NSUnknownKeyException', reason: '[<DeckWheel.PopUpAddDeckViewControllerSwift 0x10026cbe0> setValue:forUndefinedKey:]

答えて

1

はすぐにそれをロードしない なぜ介してペン先をロードありません。ビューコントローラのviewが照会されるまで、NIBは実際にはロードされません。 the docs for UIViewController's init(nibName:bundle:) methodから

:もちろん

The nib file you specify is not loaded right away. It is loaded the first time the view controller’s view is accessed. If you want to perform additional initialization after the nib file is loaded, override the viewDidLoad method and perform your tasks there.

NIBがロードされるまで、NIBで設定アウトレット接続は、接続することはできません。したがって、viewを照会するまで、店舗はnilです。

+0

しかし、2番目の質問では、ビューにアクセスした後にtextFieldデリゲートを設定しても、キー値エラーが返されます – YellowPillow

+0

'owner'パラメータに送信するオブジェクトは、IBOutletsをフックしようとしますに。あなたはコンセントのいずれかのプロパティを持たないクラスのインスタンスの代わりに実際のクラスを送信しています – dan

+0

@YellowPillow、 "第2の質問"のために、あなたは知っていますか?ダンはそれに答えましたが、上記です。 –

関連する問題