ios - 代表仍然为零
问题描述
我正在尝试使用委托将数据从一个 ViewController 发送到另一个,但似乎无法获得正确的实例
我尝试在接收 ViewController 中的不同位置设置委托,包括 ViewDidLoad,但发送 ViewController 中的委托始终为零。
据我所知,这似乎是每个人都经历过的一般问题,而且我已经阅读了很多示例,尝试了它们,但无济于事。我不知道我是否遗漏了什么。如果你愿意,请提供一些启示。
下面是我最终得到的。
发送 ViewController:
protocol CreateChatDelegate: class{
func appendChatData(_ sender: CreateChatViewController)
}
class CreateChatViewController: UIViewController {
weak var delegate: CreateChatDelegate!
@IBAction func createChat(_ sender: AnyObject) {
delegate?.appendChatData(self)
if delegate == nil {
print("delegate unsuccessful")
} else {
print("delegate successful")
}
}
接收视图控制器:
class ViewController: UIViewController{
var createChatViewController: CreateChatViewController!
override func viewDidLoad() {
super.viewDidLoad()
...
}
}
extension ViewController: CreateChatDelegate {
func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
// get the reference to the ViewController
self.createChatViewController = segue.destination as? CreateChatViewController
// set it as delegate
self.createChatViewController?.delegate = self
print("ViewController: delegate successful")
}
}
func appendChatData(_ sender: CreateChatViewController) {
print("ViewController: CreateChatDelegate called")
}
}
此代码输出“委托不成功”,因为委托始终为零
解决方案
要成功配置 segue,您需要确保
1-导航由触发
self.performSegue(withIdentifier:"segue",sender:nil)
2-强制展开
self.createChatViewController = segue.destination as! CreateChatViewController
因为as?
演员可能由于某种原因默默地失败
推荐阅读
- c++ - iphone XS,“std::__1::basic_string, std::__1::allocator >::~basic_string()”崩溃
- python - 按键值分组
- javascript - 为什么当异步函数不应该返回 Promise 时,我需要等待它?
- postgresql - 级联更新所有外键而不实际更改主键
- r - 如何使用 sparklyr 在 R 中操作 Spark Dataframe?
- python-3.x - ImportError:无法从“pandas._libs.tslibs”导入名称“Timedelta”
- csv - pyspark:spark.read.format("csv") 与 spark.read.csv 的差异性能
- jquery - 使用jquery slideUp后如何将元素恢复到以前的状态?
- reactjs - 将道具和样式传递给功能组件(React)
- mysql - windows server 2012 mysql日志文件已删除但释放c中的空间