从DetailViewController(swift)访问MasterViewController中的功能

从DetailViewController(swift)访问MasterViewController中的功能,swift,uiviewcontroller,Swift,Uiviewcontroller,我在MasterViewController中有一个函数 func removeLocation(city: String){ objects.removeObject(city) self.tableView.reloadData() } 在我的DetailViewController中,我检查城市是否有效,如果无效,我想将其从MasterViewController的表中删除。我将prepareForSegue()中的self从MasterView传递

我在MasterViewController中有一个函数

 func removeLocation(city: String){
        objects.removeObject(city)
        self.tableView.reloadData()
  }
在我的DetailViewController中,我检查城市是否有效,如果无效,我想将其从MasterViewController的表中删除。我将prepareForSegue()中的self从MasterView传递到DetailView,并将其分配给

 var masterViewController: MasterViewController
但是我得到一个错误,说它没有初始化,它希望我有这个初始化器

required init(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}
当我运行它时,它破坏了我的整个程序,并给我一个预期的致命错误

我可以在没有初始值设定项的情况下在DetailView中创建MasterView实例,或者从DetailView访问MasterView中的函数吗

这是Swift btw,我找到了一些关于如何在C中解决它的建议,但我无法实现它们。

使用可选的

var masterViewController: MasterViewController?
创建类时,不必初始化选项

prepareforsgue()
中,按常规分配指针:

destinationViewController.masterViewController = self
然后,当您需要调用
removeLocation
时:

masterViewController?.removeLocation("London")

非常感谢。但现在我仍然必须从DetailView返回MasterView,只有这样城市才会被移除。有没有办法在MasterView中的条目从表中删除后自动重定向到MasterView?我不明白。你能从用户的角度描述一下这是如何工作的吗?好的,你有一些带有位置的表格单元格,如“伦敦”、“波士顿”等。然后你点击它们,它会显示一个detailViewController,其中包含我从服务器获得的城市详细信息。在显示细节之前,我先检查城市是否存在。如果没有,我会发送警报通知说找不到该城市。我按下OK,我想再次看到表格单元格。但当前,当我按“确定”时,我看到空的detailViewController和不存在的城市,我必须返回masterView。它确实从tableView中删除了城市,但问题又回来了。在这种情况下,您根本不想分离,对“城市是否存在”的检查是否需要检查服务器?