2017-02-23 51 views
1

Итак, когда я пытаюсь использовать функцию present() в Swift, она всегда сбой. Вот мой кодpresent (_: animated: completion :) не работает в Swift 3

func infoOpener(sender: UISwipeGestureRecognizer) { 

    let location: CGPoint = sender.location(in: tableView) 

    let cellPath: IndexPath = tableView.indexPathForRow(at: location)! 


    let VC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "userInfo") as! userInfoVC 

    VC.username = "@\(self.user[cellPath.row].username)" 
    VC.imageUrl = self.user[cellPath.row].imagePath 


    self.present(VC, animated: false, completion: nil) 

} 

Всякий раз, когда я использую функцию present(_:animated:completion:), я получаю сообщение об ошибке EXC_BREAKPOINT. Может кто-нибудь мне помочь?

+0

сначала убедитесь, что объект вашего VC правильно создан или нет. Я имею в виду, что объект проверки 'VC' равен нулю или нет. –

+0

установите точку останова перед вызовом self и проверьте, нет ли вашего VC – Makaille

+0

Пожалуйста, проверьте данные, которые вы отправляете, правильно, распечатав их, и значение cellPath является правильным или нет, потому что правильный код. –

ответ

3

Использование if let или guard let вместо силы разворачивания OPTIONALS с !, чтобы сделать код более надежным:

func infoOpener(sender: UISwipeGestureRecognizer) { 

    let location: CGPoint = sender.location(in: tableView) 

    guard let cellPath: IndexPath = tableView.indexPathForRow(at: location) else { 
     print("No index path found") 
     return 
    } 

    guard let VC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "userInfo") as? userInfoVC else { 
     print("View controller could not be instantiated") 
     return 
    } 

    VC.username = "@\(self.user[cellPath.row].username)" 
    VC.imageUrl = self.user[cellPath.row].imagePath 


    self.present(VC, animated: false, completion: nil) 

} 
1
func infoOpener(sender: UISwipeGestureRecognizer) { 

      let location: CGPoint = sender.location(in: tableView) 
      let cellPath: IndexPath = tableView.indexPathForRow(at: location)! 

      if sender.state == .ended /*present in touch end*/ { 
       let VC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "userInfo") as! userInfoVC 
       VC.username = "@\(self.user[cellPath.row].username)" 
       VC.imageUrl = self.user[cellPath.row].imagePath 
       self.present(VC, animated: false, completion: nil) 
      } 
     } 
+0

Он снова разбился. Что-нибудь еще? –

+0

, где вы объявляете переменную cellPath? –

+0

где на самом деле ваш метод infoOpener ... обычно self.present дает нам ошибку, если я не viewcontroller, так что вы можете проверить сферу себя ... –

0

Вы говорите, что ваша ошибка: «Фатальная ошибка: неожиданно нашли ноль в то время как разворачивание необязательное значение « Проблема, вероятно, не в методе present(), а в вашем ViewController есть несколько IBOutlet или переменная. Проверьте, что все розетки подключены правильно, или что то, что вы устанавливаете на «имя пользователя» и «imageURL», не равно нулю, если эти переменные не принимают значение nil.

Смежные вопросы