2017-09-01 14 views
0

まず、私がしようとしていることを紹介しましょう。 Second ...私はSwift/iOS開発の初心者です。私がやろうとしている何iOS/Swiftでプログラムでビューを設定した後、RevealViewControllerが機能しない

This is My Storyboard

です:私は、アプリを開くと、それはLoginVCを ロードします。ユーザーがログインすると、TableSelectionVCがロードされます。ユーザーがセルを選択すると、選択した値でホーム画面に移動します。ユーザーがベルをタップすると(青い矢印)、アプリはAlarmVCに移動する必要があります。

正常に動作するはずですが、そうではありません。 AlarmVCによると、self.revealViewController()はゼロです。 BUTメニューオプション(赤い矢印)でalarmVCに行くと、正常にロードされ、メニューが表示されます。また、オプションを緑で選択するとTableSelectionVCに移動し、アイコンをタップするとalarmVCに移動し、クラッシュしません。問題は、LoginVCからTableSelectionVCに移動してアイコンをタップするとクラッシュすることです。

私は、コントローラをインスタンス化してwindow.rootViewControllerを設定して、ビューを設定していると思います。私AppDelegate

私は次のような機能を持っている:アプリで

func changeRootViewControllerToSWRevealViewController() { 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let controller = storyboard.instantiateViewController(withIdentifier: "SWRevealViewController") 
    controller.modalTransitionStyle = .flipHorizontal 
    if let window = self.window { 
     window.rootViewController = controller 
    } 
} 

func changeRootViewControllerToPlantSelectionVC() { 
    let storyboard = UIStoryboard(name: "Main", bundle: nil) 
    let controller = storyboard.instantiateViewController(withIdentifier: "navPlantSelectionVC") 
    controller.modalTransitionStyle = .flipHorizontal 
    if let window = self.window { 
     window.rootViewController = controller 
    } 
} 

すると、ユーザがログインすると、以下の機能が実行されます。その後

static func goToPlantSelection() { 
    guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { 
     //there should be an alert error 
     return 
    } 
    appDelegate.changeRootViewControllerToPlantSelectionVC() 
} 

を、PlantSelectionVCが示されていますユーザがセルをタップすると、appDelegate.changeRootViewControllerToSWRevealViewController()が実行され、HomeVCが表示されます。

ユーザーがアイコンをタップすると、AlarmVCに移動しようとしますが、私の言ったようにクラッシュします。私はLoginVCとTableSelectionVCでSWRevealViewControllerをバインドすると何か問題があると思います。 3行目のエラーを示し

static func setupMenuToggle(button: UIBarButtonItem, viewController: UIViewController) { 
    button.target = viewController.revealViewController() 
    viewController.revealViewController().rearViewRevealWidth = viewController.view.bounds.size.width * 0.9 
    button.action = #selector(SWRevealViewController.revealToggle(_:)) 
} 

しかし、次のとおりです:

AlarmVCに次のコードを実行しようとする オプションの値をアンラップしながら、見つけnilを誰が助けることはできますか?

答えて

0

私はそれを修正しました。 Iユーザーがログインが今取り組んでいる

 let storyboard = UIStoryboard(name: "Main", bundle: nil) 
     let controller = storyboard.instantiateViewController(withIdentifier: "navPlantSelectionVC") 
     self.revealViewController().setFront(controller, animated: true) 

とswRevealViewControllerフロントビューコントローラを変更するだろうというとき、私は、swRevealViewControllerのためにその後sw_frontとしてログイン画面を設定します。

+0

この変更はどこで行いましたか?詳細を説明してください –

+0

@CraigP私はsw_frontとしてLoginVCを設定し、LoginVC.swiftにはユーザが署名されているかどうかをチェックする機能があります。その関数の中で私はこのコードを使用しました。条件に応じて、私はちょうどvcの識別子を変更しました。 (申し訳ありませんでした前にそれを見ていない) –

+0

ありがとう私は、アプリケーションが閉じられたときに通知から特定のVCに読み込むときに同様の問題がありました。おそらく最も効率的ではないが、問題を解決したVCを呼び出す前に空白のVCを呼び出すことになった –

関連する問題