present()方法抛出'无法在包中加载NIB:' NSBundle

时间:2018-02-22 03:31:49

标签: ios swift nsbundle

使用xCode 8我创建了两个TableViewControllers。我试图将数据从一个TableViewController中的选定单元格传递到第二个。

override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath){        
    let currentCell = tableView.cellForRow(at: indexPath) as! WorkOutCell
    let workout = WorkOut()
    selectedWorkout = workout.getWorkOutByName(workoutName: currentCell.workoutNameLabel.text!)
    let evc = ExerciseViewController(nibName: "ExerciseViewController", bundle: nil)
    evc.selectedWorkout = selectedWorkout //sets the selected workout value in ExerciseViewControler
    print(evc.nibName as Any) //prints Optional("ExerciseViewController")
    present(evc, animated: true, completion: nil) //throws exception
}

当我调试这个时,数据会传递给ExerciseViewController,所以这似乎有效。打印行选择ExerciseViewController作为nibName,但是在当前方法上抛出异常,它无法找到ExerciseViewController的nibName。

  

2018-02-21 06:00:43.786每月HIIT [1994:132476] ***终止应用程序   由于未被捕获的异常' NSInternalInconsistencyException',原因:   '无法在捆绑中加载NIB:' NSBundle    (加载)'名字' ExerciseViewController''

我对这个问题很难过。我将文件添加到构建路径,但是没有用。其他问题建议添加XIB文件,但是从挖掘XIB文件看起来与我创建的故事板无关(尽管我很容易出错)。非常感谢任何帮助或建议。

由于

2 个答案:

答案 0 :(得分:2)

当你说你使用故事板而不是XIB(以前称为NIB)文件时,你给出了最大的错误提示。

尝试更换:

let evc = ExerciseViewController(nibName: "ExerciseViewController", bundle: nil)

let evc = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("ExerciseViewController") as ExerciseViewController

Here is a tutorial可能有所帮助。

答案 1 :(得分:0)

尝试使用自定义单元格(swift 4)

Add below code in => func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell

        var cell = tblView.dequeueReusableCell(withIdentifier: "cell") as? CustomCell

        if cell == nil
        {
            tblView.register(UINib(nibName: "YourNIBname/XIBname", bundle: nil), forCellReuseIdentifier: "cell")
            cell = tblView.dequeueReusableCell(withIdentifier: "cell") as? CustomCell
        }
        return cell!