Xamarin.ios ReleaseDesignerOutlets未重新分配的已解除分配的出口

Xamarin.ios ReleaseDesignerOutlets未重新分配的已解除分配的出口,xamarin.ios,Xamarin.ios,我有以下情况: UIViewControllerA通过故事板序列将UIViewControllerB推送到导航堆栈上 UIViewControllerB现在在屏幕上,我通过iOS模拟器模拟内存警告 调用UIViewControllerA.DidReceiveMemoryWarning()以及UIViewControllerA.ViewDidUnload() 在方法UIViewControllerA.ViewDidUnload()中,我根据建议调用ReleaseDesignerOutlets

我有以下情况:

  • UIViewControllerA通过故事板序列将UIViewControllerB推送到导航堆栈上

  • UIViewControllerB现在在屏幕上,我通过iOS模拟器模拟内存警告

  • 调用UIViewControllerA.DidReceiveMemoryWarning()以及UIViewControllerA.ViewDidUnload()

  • 在方法UIViewControllerA.ViewDidUnload()中,我根据建议调用ReleaseDesignerOutlets()。UIViewControllerA designer门店现在已解除分配且为空

  • 我点击了导航栏上的“后退”按钮,该按钮将取消UIViewControllerB并导致调用UIViewControllerA.ViewDidLoad()

  • 此时,我希望设计器输出被初始化,但它们仍然为null,并且我的应用程序由于null指针异常而崩溃

  • 我是不是错过了什么?我使用的是Monotouch 5.4.0

    编辑 我发现这个描述问题解决方案的方法与我发现的方法相同,即,不要在ViewDidUnload()中释放设计器

    更新:它终于无故障了!(或者至少看起来是这样)

    作为将来的参考,这似乎是由于我在ViewDidUnload事件中处理了UIWebView插座而造成的。UIWebView在xib中定义,而不是在代码中添加为子视图

    内存不足时,视图卸载并卸下UIWebView出口。随后,当应用程序恢复(!?)时,ViewDidLoad事件将再次触发,但它将锁定我希望在重新加载视图(即重新加载xib)时,UIWebView会在中恢复

    不是这样吗我认为在ViewDidUnload事件中处理插座是一个很好的做法

    我一注释掉“webView.Dispose();webView=null;”行代码,它就按预期工作了

    多好的一天啊

    编辑
    进一步的调试显示,一些设计器出口正在重新分配,如UIImageView和UIScrollView,而其他的,如UIExtField和UIBarButtonim则没有。

    您能发布一些代码吗?特别是控制器A是如何创建/设置的,以及它是如何
    ViewDidLoad
    ViewDidLoad
    ?控制器A的ViewDidLoad没有什么特别之处,它只是向设计器出口按钮添加了一个事件处理程序。如果我从ViewDidUnload()中注释掉ReleaseDesignerOutlets(),问题就会消失,但这似乎是错误的解决方案……您如何创建控制器?只需执行
    new ControllerA()
    或通过故事板/nib,您不会在任何地方调用
    LoadView()
    ,对吗?所有控制器都在故事板中声明,因此我们有一个UINavigationController->view controller a->view controller B。没有显式构造函数调用,也没有LoadView()。