Swift 无法到达目的地 class 每当我 select tableView 行中的一行

Swift unable to get to the destination class whenever I select a row in the tableView row

简单的情况。每当我在 View1 中 select 一行时,我都会崩溃。

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let storyboard = UIStoryboard(name: "NextScreen", bundle: nil)
    let controller = storyboard.instantiateViewController(withIdentifier: "NextScreenViewController") as! NextScreenViewController
    self.navigationController?.pushViewController(controller, animated: false)
  }

我确实有一个 NextScreen.xib 是这个 class NextScreenViewController 的所有者 帮助将不胜感激!

您的代码和您的描述不匹配。您的代码要求您有一个名为“NextScreen”的故事板文件,其中包含一个标识符为“NextScreenViewController”的视图控制器,它是 NextScreenViewController.

类型的 UIViewController 的子class

您的描述说您有一个 NextScreen.xib“是此 class NextScreenViewController 的所有者”。您的代码并未尝试从 XIB 加载视图控制器。它正在尝试从情节提要中加载它。是哪个?

XIB 文件和故事板是在项目中包含视图的两种不同方式。如果将视图控制器的视图保存在 XIB 中,则需要从 XIB 加载它们。如果将它们保存在情节提要中,则需要从情节提要中加载它们。 如果您将视图控制器的视图保存在 XIB 文件中,然后尝试从情节提要中加载它们,您的应用将会崩溃。

您添加到问题中的崩溃日志清楚地表明您尝试加载的故事板不存在,这就是您崩溃的原因。它说“找不到名为 'PlacesPlusScreen' 的故事板。”证明是肯定的。

您的项目中是否有名为“NextScreen”的 Storyboard 文件或 XIB 文件?什么线路崩溃了?具体的错误信息是什么?

尝试像这样更改您的函数:

 func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let storyboard = UIStoryboard(name: "NextScreen", bundle: nil)
    guard let controller = storyboard.instantiateViewController(withIdentifier: "NextScreenViewController") as? NextScreenViewController else {
        print("Can't load storyboard with ID 'NextScreenViewController'")
        return
    }
    self.navigationController?.pushViewController(controller, animated: false)
  }

注意你的行

let storyboard = UIStoryboard(name: "NextScreen", bundle: nil)

如果无法加载您的故事板文件,将使您的程序崩溃并抛出异常,描述为“无法在捆绑包中找到名为 'NextScreen' 的故事板...”。

因此,您再次需要在控制台中查看确切的崩溃消息,如果您需要我们帮助调试问题,请在此处报告。

这是崩溃的地方

func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
    let storyboard = UIStoryboard(name: "PlacesPlusScreen", bundle: nil)
    guard let controller = storyboard.instantiateViewController(withIdentifier: "PlacesPlusScreenController") as? PlacesPlusScreenController else {
            print("Can't load storyboard with ID 'PlacesPlusScreenController'")
            return
        }
       self.navigationController?.pushViewController(controller, animated: false)

  }

这是class

class PlacesPlusScreenController: UIViewController

这是 xib 文件和 PlacesPlusScreen 所在的层次结构。

这是崩溃报告

07-22 20:49:44.080494-0700 Example[14820:6956631] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Could not find a storyboard named 'PlacesPlusScreen' in bundle NSBundle </private/var/containers/Bundle/Application/87BBA05A-9FF9-4851-A4FB-05DF7938E232/Example.app> (loaded)'
*** Ffirst throw call stack:
(0x184c9e754 0x1997657a8 0x187810ffc 0x102fbca0c 0x102fbc730 0x102fbcaec 0x18789f1d0 0x18789ed78 0x18789f538 0x187b69c98 0x18769c6c4 0x18768b03c 0x1876bef10 0x184c175e0 0x184c11704 0x184c11cb0 0x184c11360 0x19c24f734 0x18768c584 0x187691df4 0x102fc9478 0x1848cdcf8)
libc++abi: terminating with uncaught exception of type NSException
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Could not find a storyboard named 'PlacesPlusScreen' in bundle NSBundle </private/var/containers/Bundle/Application/87BBA05A-9FF9-4851-A4FB-05DF7938E232/JacquardSDK_Example.app> (loaded)'
terminating with uncaught exception of type NSException
(lldb) 

只能这样做!

 let vc = PlacesPlusScreenController()
 self.navigationController?.pushViewController(vc, animated: true)