まず、私がしようとしていることを紹介しましょう。 Second ...私はSwift/iOS開発の初心者です。私がやろうとしている何iOS/Swiftでプログラムでビューを設定した後、RevealViewControllerが機能しない
です:私は、アプリを開くと、それは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を誰が助けることはできますか?
この変更はどこで行いましたか?詳細を説明してください –
@CraigP私はsw_frontとしてLoginVCを設定し、LoginVC.swiftにはユーザが署名されているかどうかをチェックする機能があります。その関数の中で私はこのコードを使用しました。条件に応じて、私はちょうどvcの識別子を変更しました。 (申し訳ありませんでした前にそれを見ていない) –
ありがとう私は、アプリケーションが閉じられたときに通知から特定のVCに読み込むときに同様の問題がありました。おそらく最も効率的ではないが、問題を解決したVCを呼び出す前に空白のVCを呼び出すことになった –