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

Ale*_*akh 2 xamarin.ios mvvmcross xamarin

我有一个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 ()
Run Code Online (Sandbox Code Playgroud)

如果我通过复制现有的并重命名它来创建新视图,那么更有趣的是 - 一切正常.我试图弄清楚有什么区别,但我发现的唯一的事情是: 在此输入图像描述 在此输入图像描述

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

Los*_*oon 5

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

public Test1ViewController (IntPtr handle) : base (handle)
{
}
Run Code Online (Sandbox Code Playgroud)

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

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

  • 如果您正在使用故事板进行 MVVMCross,您可能会发现自己在这里。 (2认同)