答案 0 :(得分:4)
您似乎不了解类和实例(面向对象编程)。一个类可以有很多实例;这些实例不是彼此相同的对象。您不会向查看控制器类发送消息,而是查看控制器实例。在您的方案中,一个视图控制器实例正在尝试将消息发送回另一个已存在的视图控制器实例。
因此,这种方法永远不会起作用:
let allocVC = AllocationViewController()
allocVC.sendAsMsg(txtTask.text!, descPassed: txtDesc.text)
在此方法中,您将创建一个全新 AllocationViewController实例并向其发送消息。但这没有意义,因为此 AllocationViewController实例不是现有的 AllocationViewController实例。是您要向其发送消息的现有 AllocationViewController实例。
这就是第一个方法 工作的原因。您正在将delegateToParentVC
设置为实际的现有 AllocationViewController实例。
答案 1 :(得分:1)
我想在@matt的答案中增加一点。你是正确的,你可以通过获取一个类的实例来调用方法。正如我们在@matt的回答中所看到的那样,您正在创建一个类的新实例,这在这种情况下很少有用。更好的方法是通过访问全局sharedApplication
来获取现有的类实例,然后从中查找类实例。
你会结束这样的事情:
let app = UIApplication.sharedApplication().delegate as! AppDelegate
let vc = app.window?.rootViewController as! AllocationViewController
vc.sendAsMsg(txtTask.text!, descPassed: txtDesc.text)
您的最终代码可能与我的有点不同,具体取决于应用程序层次结构中列出AllocationViewController
的位置。