无法调用 tableViewController

Cannot invoke tableViewController

我一直在努力切换 viewControllers。

我得到了以下故事板:

左上角 VC 是登录名 VC,它通过模式转场将视图推送到 MainViewController(左下角)。

这可以通过以下方式正常工作:

self.performSegueWithIdentifier("MainSegue", sender: self)

MainViewController 托管一个 "Menu" 栏项,单击该项会启动 cocoa 控制 SSASideMenu 并显示 LeftSideMenu VC。这也很好用。

LeftSideMenu VC 有 2 个菜单项("home" 和 "order")。项目 "home" 将返回到 MainViewController(下面的案例 0 - 工作正常)。 Item "order" 需要呈现 ItemTableViewController(右上角),它基本上是一个表 VC,带有嵌入导航控制器的原型单元格。

下面的案例 1 是全部出错的地方:

func tableView(..........) {

    tableView.deselectRowAtIndexPath(indexPath,animated: true)

    switch (indexPath.row) {
        case 0: 
            sideMenuViewController?.contentViewController =
                UINavigationController(rootViewController: MainViewController())
            sideMenuViewController?.hideMenuViewController()
        break 
        case 1: 
            sideMenuViewController?.contentViewController =
                UINavigationController(rootViewController: ItemTableViewController())
            sideMenuViewController?.hideMenuViewController()
        break
    }
}

因此,情况 1 将导致调用 ItemTableViewController 的 func tableView:

func tableView(tableView: UITableView, cellForRowAtIndexPath ...) {

    let cellIdentifier = "MenuItemTableViewCell"
    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as! MenuItemTableViewCell!

    let item = items[indexPath.row]

    cell.cellTitle.text = item.name // **cell is always nil**

    ....

单元格始终为零。

我尝试用以下方式注册 class(尽管我不必这样做,因为我使用的是故事板):

    let cell = tableView.dequeueReusableCellWithIdentifier(cellIdentifier) as! MenuItemTableViewCell!
    if cell == nil {
            tableView.RegisterClass(MenuItemTableViewCell.self, forCellReuseIdentifier: cellIdentifier)
            cell = MenuItemTableViewCell(style: UITableViewCellStyle.Default, reuseIdentifier: cellIdentifier)

    let item = items[indexPath.row]

    cell.cellTitle.text = item.name // **cell is still nil**

我也用 segue 尝试过,但发现 segue not exists on LeftSideMenu 错误(正确的 cellIdentifier 确实存在)。

底线是我无法调用 ItemTableViewController(右上表VC)!

有什么线索吗?

你永远不应该打电话给 dequeueReusableCellWithIdentifier:。始终使用 dequeueReusableCellWithIdentifier:forIndexPath: 代替。它可以 永远不会 return 一个 nil 单元格,如果有问题,它会给你一个很好的错误消息来解释原因。

我预计会发生的是您会收到一条错误消息,告诉您未连接到故事板中的原型单元。然后你必须弄清楚为什么。获得正确的单元标识符当然是至关重要的:它必须与您的代码的重用标识符 完全匹配 ,包括拼写。但远不止于此。也许您忘记了在故事板中设置 table 视图控制器的自定义 class。或者您可能获得了 table 视图控制器的错误实例 - 即,您创建了一个新实例,而不是从情节提要中获取实际实例,即具有原型单元格的实例。