Swift3 数据未通过prepareForSegue从主VC传递到嵌入式VC
我试图将数据从主VC(称为StartVC)传递到嵌入式VC(称为MPList,它本身包含一个tableview) 我找到的解决方案都指向使用prepareforsegue方法,但这似乎对我不起作用。应用程序运行时没有错误,并且tableview没有使用我发送的数据填充 在StartVC中,我实现了如下的prepareforsegue方法(在attributes inspector中,嵌入序列的标识符肯定是“LeftPane”): mpNames是在嵌入式MPList中初始化的字符串数组,如下所示(mpListTV是相关tableview的IBOUTLET): 通常的tableview控制方法也在MPList中实现(这也是使用mpNames的地方): 我还确保右键单击并从tableview拖动到MPList viewcontroller顶部的黄色小图标,并设置datasource和delegateSwift3 数据未通过prepareForSegue从主VC传递到嵌入式VC,swift3,xcode8,ios10,Swift3,Xcode8,Ios10,我试图将数据从主VC(称为StartVC)传递到嵌入式VC(称为MPList,它本身包含一个tableview) 我找到的解决方案都指向使用prepareforsegue方法,但这似乎对我不起作用。应用程序运行时没有错误,并且tableview没有使用我发送的数据填充 在StartVC中,我实现了如下的prepareforsegue方法(在attributes inspector中,嵌入序列的标识符肯定是“LeftPane”): mpNames是在嵌入式MPList中初始化的字符串数组,如下所示
在这样做了几个小时后,我可能只是感到疲劳(并且错过了一些非常明显的事情),但有人能帮我摆脱痛苦,告诉我我做错了什么吗?我在这里看到的可能问题: 1. 确保IB中的目标视图控制器确实设置为
MPList
。可能是因为这个原因,mpListVC
在这里是nil
。只需调试并确保mpListVc
不是零
还需要调试并确保no optional为零。最好使用强制展开(!
)尝试在某处找到一个可能的nil
只需设置一个断点并检查是否确实设置了mpNames
2.
由于某种原因,可能会在prepareFormsgue
之前调用viewDidLoad
ofMPList
,尽管不应该。无论哪种方式,在重置数组后,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()
}
}