2017-07-27 5 views
-1

私はこのチュートリアルYoutubeに従っていますが、スライドアウトメニューを作成しようとしていますが、オプションの値をアンラップしている間に予期せずエラーが発生しました。私はそれがself.storyboard ?instantiateViewController(withIdentifier: "SlideMenuView")と同じであると信じています! SlideMenuView?私のコードは以下の通りです:Swiftのスライドアウトメニュー3

class CategoryTableView: UIViewController, UITableViewDelegate, UITableViewDataSource, UITextFieldDelegate { 



     @IBOutlet weak var menuTableView: ExpandableTableView! 
     var slideMenuVC: SlideMenuView? 
     var ref: DatabaseReference! 
     var categories = [Category]() 

     override func viewDidLoad() { 
      super.viewDidLoad() 
      menuTableView.allHeadersInitiallyCollapsed = true 
      menuTableView.initiallyExpandedSection = 1 
      menuTableView.singleSelectionEnable = true 
      slideMenuVC = self.storyboard?.instantiateViewController(withIdentifier: "SlideMenuView") as! SlideMenuView? 
      categoryTableViewCleanUp() 
      ref = Database.database().reference() 
      loadData() 
      // registerForPushNotifications() 
     } 
     // Menu Table 
     func categoryTableViewCleanUp() { 
      menuTableView?.delegate = self 
      menuTableView?.dataSource = self 
     } 
     // MARK: Notifications 
     /*func getNotificationSettings() { 
      UNUserNotificationCenter.current().getNotificationSettings { (settings) in 
       print("Notification settings: \(settings)") 
       guard settings.authorizationStatus == .authorized else { return } 
       UIApplication.shared.registerForRemoteNotifications() 
      } 
     } 
     func registerForPushNotifications() { 
      UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) { 
       (granted, error) in 
       print("Permission granted: \(granted)") 
      } 
      guard granted else { return } 
      self.getNotificationSettings() 
     } */ 
     // MARK: Slideout Menu 
     @IBAction func menuAction(_ sender: UIBarButtonItem) { 
      // Show menu 
      if AppDelegate.slideMenuBool{ 
       showSlideMenu() 
      } 
      else { 
       closeSlideMenu() 
      } 

     } 
     func showSlideMenu() { 
      self.slideMenuVC?.view.backgroundColor = UIColor.black.withAlphaComponent(0.6) 
      self.addChildViewController((slideMenuVC)!) 
      self.view.addSubview((slideMenuVC?.view)!) 
      AppDelegate.slideMenuBool = false 
     } 
     func closeSlideMenu() { 
      self.slideMenuVC?.view.removeFromSuperview() 
      AppDelegate.slideMenuBool = true 
     } 
+0

SlideMenuViewはこの識別子がストーリーボードと一致していますか? –

+0

@SaurabhJain私は識別子を作成しました。今、私はこのエラーを受け取ります:Unknown class SlideMenuView Interface Builder file。 タイプ 'UIViewController'の値をキャストできませんでした。 –

+0

SlideMenuViewのスーパークラスがUIViewControllerであることを慎重に確認してください。 –

答えて

1

あなたのコード識別子とストーリーボードの一致を確認してみてください。

slideMenuVC = self.storyboard?.instantiateViewController(withIdentifier: "SlideMenuView") as! SlideMenuView? 

識別子が一致しなかった場合、slideMenuVCはnilで例外が発生します。