2017-01-30 10 views
0

これは簡単な質問ですが、ここで何が問題なのか何時間もわかりませんでした。なぜviewcontrollerで渡された値がnilであるか

enum TypeOfAlert { 
    case success, error, warning, confirm 
} 

class MainAlertView: UIViewController { 

    var mode: TypeOfAlert! 

    var transitioner : CAVTransitioner  

    override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: Bundle?) { 
     self.transitioner = CAVTransitioner() 
     super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) 
     self.modalPresentationStyle = .custom 
     self.transitioningDelegate = self.transitioner 

     setupAlertView() 
    } 

    private func setupAlertView() { 
     print(mode) // result is nil 
    } 

    convenience init() { 
     self.init(nibName:nil, bundle:nil) 
    } 

    required init?(coder: NSCoder) { 
     fatalError("NSCoding not supported") 
    } 
} 

は私がボタン

let vc = IFOMainAlertView() 
    vc.delegate = self 
    vc.mode = TypeOfAlert.confirm 
    self.present(vc,animated: true) 

を押してMainAlertViewを開く

alertdialog表示するには、このコードを持っているが、私は印刷したり、VARモードをデバッグのいたときには常にnilです。どうして ?

答えて

2

あなたは初期化の時点でデバッグしようとしている

+0

viewDidLoad方法にmode属性をデバッグ遅らせる私はあなたがsetupAlertMode、VAR「モード」のプリント値が、「モードの​​値を呼び出すのinitで – pmb

+2

言ったそれを取得できませんでした'あなたはinitの後に設定します –

0

を、それを設定する前に、VARモードを印刷している

あなたが呼ばれる前に、関数initが呼び出された

let vc = IFOMainAlertView() 

呼ば

残り:

vc.delegate = self 
vc.mode = TypeOfAlert.confirm 

あなたのクラスに新しいコンストラクタを追加するかそれは、引数としてmodeを取る、または

関連する問題