Swift3 数据未通过prepareForSegue从主VC传递到嵌入式VC

Swift3 数据未通过prepareForSegue从主VC传递到嵌入式VC,swift3,xcode8,ios10,Swift3,Xcode8,Ios10,我试图将数据从主VC(称为StartVC)传递到嵌入式VC(称为MPList,它本身包含一个tableview) 我找到的解决方案都指向使用prepareforsegue方法,但这似乎对我不起作用。应用程序运行时没有错误,并且tableview没有使用我发送的数据填充 在StartVC中,我实现了如下的prepareforsegue方法(在attributes inspector中,嵌入序列的标识符肯定是“LeftPane”): mpNames是在嵌入式MPList中初始化的字符串数组,如下所示

我试图将数据从主VC(称为StartVC)传递到嵌入式VC(称为MPList,它本身包含一个tableview)

我找到的解决方案都指向使用prepareforsegue方法,但这似乎对我不起作用。应用程序运行时没有错误,并且tableview没有使用我发送的数据填充

在StartVC中,我实现了如下的prepareforsegue方法(在attributes inspector中,嵌入序列的标识符肯定是“LeftPane”):

mpNames是在嵌入式MPList中初始化的字符串数组,如下所示(mpListTV是相关tableview的IBOUTLET):

通常的tableview控制方法也在MPList中实现(这也是使用mpNames的地方):

我还确保右键单击并从tableview拖动到MPList viewcontroller顶部的黄色小图标,并设置datasource和delegate


在这样做了几个小时后,我可能只是感到疲劳(并且错过了一些非常明显的事情),但有人能帮我摆脱痛苦,告诉我我做错了什么吗?

我在这里看到的可能问题:

1. 确保IB中的目标视图控制器确实设置为
MPList
。可能是因为这个原因,
mpListVC
在这里是
nil
。只需调试并确保
mpListVc
不是零

还需要调试并确保
no optional为零。最好使用强制展开(
)尝试在某处找到一个可能的
nil

只需设置一个断点并检查是否确实设置了
mpNames

2. 由于某种原因,可能会在
prepareFormsgue
之前调用
viewDidLoad
of
MPList
,尽管不应该。无论哪种方式,在重置数组后,
UITableView
reloadData
都是一个很好的做法

 var mpNames = [String]() {
    didSet {
       mpListView?.reloadData()
    }

}

你好,迈克尔-谢谢你的回复!选项2解决了我的问题!我尝试在MPList的viewDidLoad和viewDidAppear中使用reloadData方法,但没有成功。你的解决方案非常有效!非常感谢。
class MPList: UIViewController, UITableViewDataSource, UITableViewDelegate{


var mpNames = [String]()


override func viewDidLoad() {
    super.viewDidLoad()


    mpListTV.delegate = self
    mpListTV.dataSource = self


    print("names in MPList is: \(mpNames)")


}
    //MARK: - TABLEVIEW METHODS

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{

    return mpNames.count

}

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell{

    let cell = tableView.dequeueReusableCell(withIdentifier: "cell", for: indexPath)
    cell.textLabel?.text = mpNames[indexPath.row]

    return cell


}
//in prepareForSegue
let mpListVC = segue.destination as? MPList
 var mpNames = [String]() {
    didSet {
       mpListView?.reloadData()
    }

}