Xamarin 访问 iOS 绑定 QualtricsSurveyViewController

Xamarin access to iOS binding QualtricsSurveyViewController

我已经为 iOS 创建了一个绑定库,使用 sharpie bind 生成了 APIDefintions 和 StructsAndEnums class,添加了对绑定库的本地引用,相应地设置了框架属性,并添加了一个绑定库对 iOS 项目的本地引用。

在 AppDelegate class 中,我正在尝试初始化 ViewController,但应用程序崩溃并显示消息:

致命错误:使用未实现的初始化程序 'init(nibName:bundle:)' 用于 class 'Qualtrics.QualtricsSurveyViewController'

这是我的 VC 代码:

public partial class QualtricsViewController : QualtricsSurveyViewController
{
    public QualtricsViewController(NSString nibNameOrNil, NSNumber bundle) : base(nibNameOrNil, bundle)
    {
        this.Init();
    }
    public QualtricsViewController(NSCoder coder) : base(coder)
    {
        base.Init();
    }
    public QualtricsViewController()
    {

    }
    public override void ViewDidLoad()
    {
        base.ViewDidLoad();

        var btn = UIButton.FromType(UIButtonType.System);
        btn.Frame = new CGRect(20, 200, 280, 44);
        btn.SetTitle("Click Me", UIControlState.Normal);

        var user = new UIViewController();

        btn.TouchUpInside += (sender, e) => {
            this.NavigationController.PushViewController(user, true);
        };
    }
}

在 AppDelegate 中 class 我这样称呼它:

 var qualtricsVC = new QualtricsViewController(); 

我对设置本机绑定比较陌生。我的 Native Binding proj 编译正确并且一切 似乎 都很好,直到我调用 QualtricsSurveyViewController。任何帮助,将不胜感激。提前致谢!

该错误表明您使用 viewcontroller 进行的初始化不正确。

注意:如果您为 viewcontroller 创建 class 构造函数 public QualtricsViewController(nibNameOrNil, bundle) ,则意味着 viewcontroller 必须来自故事板,我们无法对其进行初始化以编程方式。

要解决这个问题,删除构造函数应该可以。

public partial class QualtricsViewController : QualtricsSurveyViewController
{
    public override void ViewDidLoad()
    {
        base.ViewDidLoad();

        var btn = UIButton.FromType(UIButtonType.System);
        btn.Frame = new CGRect(20, 200, 280, 44);
        btn.SetTitle("Click Me", UIControlState.Normal);

        var user = new UIViewController();

        btn.TouchUpInside += (sender, e) => {
            this.NavigationController.PushViewController(user, true);
        };
    }
}