- xamarin.ios/
- Xamarin.ios ReleaseDesignerOutlets未重新分配的已解除分配的出口
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()。