2016-04-26 7 views
0

私はストーリーボードにxibを持つビューコントローラAを持っています。 は、その後、私はA.スウィフトビューコントローラ初期化問題

からBをサブクラス今私は私が

self.presentViewaController(B.init(), animated: true) 

ようですが、実際に何かを働いているが、XIBをロードしない場合B.

のビューコントローラを提示したいです。 アプリケーションは、collectionViewがnilであると言ってクラッシュします。 のはXIBがcollectionViewがあり、クラスAに言ってみましょう:私はBをインスタンス化するとき、私はcollectionViewが初期化持つことができるように

class A: UIViewController { 
    @IBOutlet weak var collectionView: UICollectionView! 
} 

class B: A { 
    //Should be empty right? since it inherits from A, 
    // but the collectionView from super class is not initialized. 
} 

私はこの問題をどのように修正すればよいですか?

答えて

1

あなたがインスタンス化し、そのようなViewControllerをへの参照を保持する必要があります

var viewController = someViewController(nibName: "SomeViewController", bundle: nil) 

そして、そのように提示:

self.presentViewController(viewController, animated: true) 

はもちろん、単純に次のように提示することができますが、それはを嫌です。

self.presentViewController(someViewController(nibName: "SomeViewController", bundle: nil), animated: true) 

ViewControllerを追跡する必要はありますが、それは柔軟性につながります。

さらに、デリゲートパターンのパラダイムをチェックする必要があります。子供のViewControllerを表示する同じViewControllerが子供をも棄却することが重要です。代替手段ではなく、子どもが自己破壊する場所。

+0

私は試しました。それは "XXViewController"ペン先をロードしましたが、ビューアウトレットは設定されていませんでした。 "スウィフトでそれがなぜ厳しいのか分かりません。何か案は? – BabyShung

+0

サブクラスにxibがないため、アウトレットが設定されていないのはなぜですか? – BabyShung

+0

@BabyShungは、ニブのアウトレットが正しく設定されていることを確認します。 – Woodstock