我遇到了将子视图中的控件映射回拥有控制器上的字段的问题。具体来说,我已将每个“控件”的出口映射到文件所有者。 Monotouch然后为控制器的xib designer.cs文件生成代码,以将这些控件引用为控制器类的属性。但是,当我运行我的代码;尝试在控件上设置属性时,我得到对象为空错误。深入研究调试器的问题;当尝试通过xib文件中的名称访问出口时,GetNativeField似乎返回null。
任何人都有任何想法为什么会发生这种情况?我检查了.xib文件和生成的代码; Outlet,Property和Field名称彼此一致。
答案 0 :(得分:0)
请注意,只有在加载视图后才能访问这些出口,这些出现在LoadView()
中或通过访问UIViewController的“View”属性(这将隐式加载视图)。
只有这样,IB内容才能构建并可供使用。
因此,如果您想更改内容,可以手动拨打LoadView()
,或在视图中覆盖它,拨打base.LoadView()
然后访问网点。
答案 1 :(得分:0)
我弄清楚造成这个问题的原因;这是我在堆栈上推动控制器的方式:
using(var batteryController = new BatteryController()){
navigationController.PushViewController(batteryController,true);
}
似乎在控制器上调用dispose时,NIB资源将从内存中删除;这导致了这个问题。
然而,这提出了另一个问题。一旦它被推入堆栈,你不应该在新控制器上调用dispose吗?在目标C中,当你将控制器推到堆栈上时;你应该在之后致电释放。那么我做错了什么呢?
答案 2 :(得分:-1)
你应该在AppDelegate上添加插座。在我的博客上试一试这是一个简单的计算器的视频,它是西班牙语但如果你看它非常自我解释你可以在这里观看它http://alexsoto.me/calculadora-monotouch它应该帮助你开始:)希望这有助于祝你好运,如果我可以帮助你做任何其他事情,请告诉我
修改:您也可以查看此视频,此视频也会使用子视图也可以为您提供帮助,这个视频是英文版http://www.alexyork.net/blog/post/Selecting-a-contact-from-the-Address-Book-with-MonoTouch.aspx