无法使用Xamarin和MvvmCross从XIB UI创建视图

时间:2014-04-14 09:09:51

标签: xamarin.ios xamarin mvvmcross

我有一个Xamarin.iOS应用程序。它是在不久前编写的,并使用XIB来定义用户界面。我想添加新视图(以及它的控制器)但每次我添加新页面并启动应用程序时都会出现以下错误:

Failed to marshal the Objective-C object 0x17a37a70 (type: LoginView). Could not find an existing managed instance for this object, nor was it possible to create a new managed instance (because the type 'Touch.LoginView' does not have a constructor that takes one IntPtr argument).
Additional information:
    Selector: viewDidLoad
    Method: Touch.LoginView:ViewDidLoad ()

如果我通过复制现有视图并重命名来创建新视图,那么更有趣的是 - 一切正常。我试图弄清楚有什么区别,但我发现的唯一的事情是: enter image description here enter image description here

如果您注意到添加了额外级别的层次结构。 它是什么级别以及为什么我的应用程序继续以新创建的视图失败(如果我想要新视图,我必须复制现有的一个)。

1 个答案:

答案 0 :(得分:5)

这种错误信息通常可能是一种真正的痛苦。在你的情况下,你很幸运,因为有一个非常简单的解决方案。使用xib或storyboard文件时,您希望在控制器中具有以下内容:

public Test1ViewController (IntPtr handle) : base (handle)
{
}

您看到的错误消息的一般说明:

  

这些问题在99%的情况下都与没有的托管实例有关   参考。在某些时候,GC会收集它,并且只要某些本机代码尝试回调到(现已释放的)托管实例,它就会崩溃。