2017-06-02 7 views
0

ユーザーがローカル通知をタップしたときに詳細ビューコントローラを表示しようとしています。通知が録画されたときにViewControllerを表示する

libc++abi.dylib: terminating with uncaught exception of type NSException

  • バージョン2

`

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping() -> Void) { 
    let userInfo = response.notification.request.content.userInfo 
    if let id = userInfo["item_id"] as? Int { 
     if let item = ItemsRepository.shared.getItem(id: id) { 
      let vc = DetailTableViewController() 
      vc.item = item 
      let storyboard = UIStoryboard(name: "Main", bundle: nil) 
      let vc = storyboard.instantiateViewController(withIdentifier: "DetailView") as! DetailTableViewController 
      vc.item = item 
      window?.rootViewController = vc 
      self.window?.makeKeyAndVisible() 

     } 
    } 
    completionHandler() 
} 

//AppDelegate.swift 

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping() -> Void) { 
    let userInfo = response.notification.request.content.userInfo 
    if let id = userInfo["item_id"] as? Int { 
     if let item = ItemsRepository.shared.getItem(id: id) { 
      let vc = DetailTableViewController() 
      vc.item = item 
      let tabController = self.window?.rootViewController as! UITabBarController 
      let navigationController = tabController.selectedViewController as! UINavigationController 
      navigationController.pushViewController(vc, animated: true) 
     } 
    } 
    completionHandler() 
} 

は、このコードは、何らかの理由で、例外を生成します。 これまでのところ、私はこのてきました

これは機能しますが、タブバーとナビゲーションコントローラは表示されなくなりました。

私はここで間違っていますか?代わりにlet vc = DetailTableViewController()

+0

どの行にコードが壊れていますか? – KKRocks

+0

AppDelegateファイルの先頭に!? –

答えて

0

を試してみてください教えてください。この

let storyboard = UIStoryboard(name: "MyStoryboardName", bundle: nil) 
    let vc = storyboard.instantiateViewController(withIdentifier: "someViewController") 

をお試しください私のストーリーボードファイル。基本的には、私はMain.storyboardをインスタンス化し、それに続く各View Controllerを次に示します。 storyboard

func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping() -> Void) { 
    let userInfo = response.notification.request.content.userInfo 
    if let id = userInfo["item_id"] as? Int { 
     if let item = ItemsRepository.shared.getItem(id: id) { 
      let dv = DetailTableViewController() 
      dv.item = item 
      let storyboard = UIStoryboard(name: "Main", bundle: nil) 
      let tabbar = storyboard.instantiateViewController(withIdentifier: "homeFeed") as! UITabBarController 
      tabbar.selectedIndex = 0 
      let nav = tabbar.selectedViewController as! UINavigationController 
      let main = nav.topViewController as! HomeCollectionViewController 
      main.performSegue(withIdentifier: "ShowDetailSegue", sender: item) 
      self.window?.rootViewController = tabbar 
      window?.makeKeyAndVisible() 

     } 
    } 
    completionHandler() 
} 
1

が、これは

+0

'self.present(vc、animated:true、完了:なし)'、不可能! 'window ?rootViewController.present(vc、animated:true、completion:nil)'を意味しますか? –

+0

はい、私は、ストーリーボードID –

+0

を介してvcをインスタンス化することを意味しました。ちょっと問題ですが、ナビゲーションコントローラとタブバーが表示されません。 –

0

を動作するかどうか、私は上の画面の流れに従うことによって、私の問題を解決してきました。この

  let tabController = self.window?.rootViewController as! UITabBarController 
      let storyboard = UIStoryboard(name: "Main", bundle: nil) 
      let vc = storyboard.instantiateViewController(withIdentifier: "DetailView") as! DetailTableViewController 
      vc.item = item 
      window?.rootViewController = tabController 
      tabController.present(vc, animated: true, completion: nil) 
+0

ビューはタブバーとナビゲーションコントローラなしで表示されています! –

+0

この行のウィンドウを削除してみますか?.rootViewController = tabController – KKRocks

+0

同じ結果..! –

関連する問題