在转型代表中呈现控制者是Nill

时间:2015-08-01 18:58:14

标签: ios swift uiviewcontroller uipresentationcontroller

我目前正在尝试使用. return *yytext; 来呈现视图控制器。我的问题是,当我的自定义转换委托调用

document.getElementById("yourElementId").click();

我的呈现控制器是$(selector).click(); ,导致它抛出异常。我是从嵌入在导航控制器中的视图控制器中呈现它的,该控制器嵌入在标签栏控制器中。我试过从这些控制器中提出同样的问题。当没有自定义模式演示时它也能正常工作,但我的目标是自定义它。我选择一个按钮并在下面提供代码时调用它。 UIPresentationController是我保留在类属性中的自定义转换委托。此外,func presentationControllerForPresentedViewController(presented: UIViewController, presentingViewController presenting: UIViewController!, sourceViewController source: UIViewController) -> UIPresentationController? 被初始化为具有自定义模式演示,以便调用我的转换委托。

nil

我很想知道为什么这个问题是为了未来的知识而发生的。截至目前,由于此异常,我的子类mapTransitionDelegate甚至没有被初始化。

1 个答案:

答案 0 :(得分:0)

UIViewController的指定初始化程序(以及它的子类)是init(nibName:bundle:)。但是,文档特别说:

  

这是此类的指定初始值设定项。使用时   故事板,用于定义视图控制器及其关联视图,   你永远不会直接初始化你的视图控制器类。代替,   视图控制器也由故事板实例化   在你的时候触发segue或以编程方式自动执行   app调用instantiateViewControllerWithIdentifier:方法   故事板对象。从a实例化视图控制器时   故事板,iOS通过调用它初始化新的视图控制器   initWithCoder:方法而不是此方法并设置nibName   存储在故事板内的nib文件的属性。

调用EnlargedMapViewController()不是正确的方法,因为它绕过了Cocoa查找碎片所需的所有机制。您应该使用其指定的初始化程序从nib实例化它,或者至少通过将其nib文件名与其类名称匹配(即EnlargedMapViewController.xib),因此调用EnlargedMapViewController(nibName: nil, bundle: nil)(传递nil)将导致Cocoa按名称寻找匹配的笔尖。

但实际上,如果你在其他地方使用故事板,为什么不在这里呢?只需为其场景设置一个标识符并使​​用instantiateViewControllerWithIdentifier:即可享受您自己保存的时间和恶化。