Ios Swift 3:获取子viewcontroller的上下文

Ios Swift 3:获取子viewcontroller的上下文,ios,swift,segue,Ios,Swift,Segue,我有一个ChildViewController,它继承自一个ParentViewController,如下所示:类ChildViewController:ParentViewController。在ParentViewController中,我尝试执行以下代码段: let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "anotherViewContro

我有一个
ChildViewController
,它继承自一个
ParentViewController
,如下所示:
类ChildViewController:ParentViewController
。在
ParentViewController
中,我尝试执行以下代码段:

let controller = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "anotherViewController") 
self.present(controller, animated: true, completion: nil)
我假设它不工作,因为它是
ParentViewController
,并且子对象在实际屏幕上可见。是否可以获取
ChildViewController
的上下文(self)以使代码段正常工作


谢谢你的帮助。

如果我现在理解了你的问题(如果有一个很大的问题),你就无法理解继承和你的“上下文”

如果您有两个类,如您所说的
ParentViewController
ChildViewController
,其中
ChildViewController
ParentViewController
的子类。您在
ParentViewController
中有一个方法,您假定该方法没有
ChildViewController
的访问/上下文,尽管实例本身是
ChildViewController
。。。你的假设是错误的

您的
ChildViewController
将从其超类
ParentViewController
继承所有方法,并且所有这些方法都将具有对
ChildViewController
的自引用,而不是对
ParentViewController
的自引用。这意味着如果您有方法
a
和方法
B
,则在子视图控制器中重写方法
B
。当父视图控制器调用方法
A
中的方法
B
时,将调用重写的方法。这意味着,尽管方法
A
在父视图控制器中被调用,但方法
B
将在子视图控制器上被调用。因此,了解“孩子”的背景从来都不是问题。问题可能是,你可能无法获得作为父母的自我背景。但这是设计创造出来的,完全是应该的

所以我想回答你的问题;是的,这是可能的,事实上已经发生在你身上了。如果在父视图控制器的方法中放置断点并打印self(在控制台类型“po self”中),您应该看到该类型实际上是子视图控制器


你面临的问题很可能是其他原因造成的。请添加异常断点以查看崩溃发生的位置,并查看控制台中的日志以查看其内容。

如果我现在理解您的问题(如果存在,则会有很大的问题),则您无法理解继承和“上下文”

如果您有两个类,如您所说的
ParentViewController
ChildViewController
,其中
ChildViewController
ParentViewController
的子类。您在
ParentViewController
中有一个方法,您假定该方法没有
ChildViewController
的访问/上下文,尽管实例本身是
ChildViewController
。。。你的假设是错误的

您的
ChildViewController
将从其超类
ParentViewController
继承所有方法,并且所有这些方法都将具有对
ChildViewController
的自引用,而不是对
ParentViewController
的自引用。这意味着如果您有方法
a
和方法
B
,则在子视图控制器中重写方法
B
。当父视图控制器调用方法
A
中的方法
B
时,将调用重写的方法。这意味着,尽管方法
A
在父视图控制器中被调用,但方法
B
将在子视图控制器上被调用。因此,了解“孩子”的背景从来都不是问题。问题可能是,你可能无法获得作为父母的自我背景。但这是设计创造出来的,完全是应该的

所以我想回答你的问题;是的,这是可能的,事实上已经发生在你身上了。如果在父视图控制器的方法中放置断点并打印self(在控制台类型“po self”中),您应该看到该类型实际上是子视图控制器


你面临的问题很可能是其他原因造成的。请添加异常断点以查看崩溃发生的位置,并查看控制台中的日志以查看其内容。

请详细说明,编辑您的问题。另一个ViewController与ChildViewController/ParentViewController之间的相关性是什么。“我假设它不起作用……”什么?!你目前的成绩如何?你期望的结果是什么?“有可能获得上下文(自我)”在哪里获得?“self”只是一个当前实例…@MaticOblak我正试图从ParentViewController呈现一个新的视图控制器,但是当我尝试时,应用程序崩溃了。ParentViewController是ChildViewController继承的,另一个ViewController只是我试图显示的另一个视图控制器。那么崩溃是什么呢?一个视图控制器从另一个视图控制器继承不会产生崩溃,即使父视图控制器正在呈现子视图控制器,反之亦然,父视图控制器呈现父视图控制器或子视图控制器呈现子视图控制器。您可以堆叠/创建同一视图控制器的任意数量的实例,并根据需要使用它们。请详细说明,编辑您的问题。另一个ViewController与ChildViewController/ParentViewController之间的相关性是什么。“我假设它不起作用……”什么?!你目前的成绩如何?你期望的结果是什么?“有可能获得上下文(自我)”在哪里获得?“self”只是一个当前实例…@MaticOblak我正试图从ParentViewController呈现一个新的视图控制器,但是当我尝试时,应用程序崩溃了。ParentViewController是ChildViewController继承的,另一个ViewController只是我试图显示的另一个视图控制器。那么崩溃是什么呢?从另一个视图控制器继承的一个视图控制器不会触发