【问题标题】:NullReferenceException when accessing GUI Components in Controllers constructor在控制器构造函数中访问 GUI 组件时出现 NullReferenceException
【发布时间】:2012-10-23 20:10:40
【问题描述】:
在 Mono 中,我有一个带有 Controller 的简单 NSWindow,我放置了一个 NSSplitView 和一个 NSButton。
如果我尝试从 Contstructor 或 Initialize() 方法访问 NSSplitView,我会得到一个 nullReferenceException。相反,如果我尝试从 ButtonClicked 方法访问 NSSplitView,它可以工作。
好吧,框架似乎在调用控制器的构造函数后创建了 GUI 组件。但是,如果不在构造函数中,我应该将配置 GUI 组件的代码放在哪里?
提前致谢。
约翰内斯
【问题讨论】:
标签:
mono
xamarin.ios
monomac
【解决方案1】:
您应该在控制器类中使用AwakeFromNib 方法。一旦所有对象都已加载并正确连接,就会调用它。
public override void AwakeFromNib ()
{
base.AwakeFromNib ();
// Do something here with the outlets
}
【解决方案2】:
你应该使用
public override void ViewDidLoad() {
base.ViewDidLoad();
}
用于配置您的视图,因为这是在刚刚加载视图时调用的方法,而不是在您实例化控制器时调用的方法。如果您在AwakeFromNib() 中配置您的视图,您将强制实例化您的视图,而您现在可能不需要它们。实际上,当您创建控制器时,只有在有人尝试访问 viewController.View 时才会创建视图。