Xamarin iOS根视图控制器在应用程序启动结束时

时间:2017-02-10 02:24:48

标签: c# ios xamarin.ios

这真的让我陷入了困境。我为Visual Studio安装了Xamarin,创建了一个空项目并连接到我的Mac。我模拟iPhone并得到此错误

Foundation.MonoTouchException: Objective-C exception thrown.  Name: NSInternalInconsistencyException Reason: Application windows are expected to have a root view controller at the end of application launch

这是由Main.cs类中的UIApplication.Main调用引起的

using UIKit;

namespace testapp
{
    public class Application
    {
        // This is the main entry point of the application.
        static void Main(string[] args)
        {
            // if you want to use a different Application Delegate class from "AppDelegate"
            // you can specify it here.
            UIApplication.Main(args, null, "AppDelegate");
        }
    } 
}

我无处可去思考 - 有没有人遇到过这个?

5 个答案:

答案 0 :(得分:3)

在项目中未正确实现AppDelegate的接缝。 iOS需要知道启动应用程序的根控制器(UIViewController)。 AppDelegate类负责设置它。这将在应用程序初始化时添加一个空视图控制器:

[Register ("AppDelegate")]
public partial class AppDelegate : UIApplicationDelegate
{
    UIWindow window;

    public override bool FinishedLaunching (UIApplication app, NSDictionary options)
    {
        window = new UIWindow (UIScreen.MainScreen.Bounds);
        window.RootViewController = new UIViewController ();
        window.MakeKeyAndVisible ();

        return true;
    }
}

答案 1 :(得分:1)

我遇到了同样的错误,我的情况是错误的是我在设置MainPage之前运行async / await方法。所以,我刚刚移动MainPage = new MainPage();就在InitializeComponent()之后;它现在有效。

答案 2 :(得分:0)

我最近在导入现有项目时遇到了同样的问题。

MainPage中为App.cs设置AppDelegate以及xleon为MainPage = new ContentPage(); 提及的更改

public ValidDate(String validDate )throws Exception
{
    validYear = Integer.parseInt(validDate.split(" ")[0]);
    validMonth = Integer.parseInt(validDate.split(" ")[1]);
    validDay = Integer.parseInt(validDate.split(" ")[2]);
}

答案 3 :(得分:0)

    public override bool FinishedLaunching(UIApplication app, NSDictionary options)
    {
        bool returnValue = base.FinishedLaunching(app, options);
        helper.rootView = this.Window.RootViewController;
        return returnValue;
    }

这将使您能够运行基类 FinishedLaunching 方法并获得结果。这里的 helper 是一个类,我需要在应用启动时知道 rootView。

答案 4 :(得分:0)

对于 Xamarin 表单: 我的问题似乎源于 app.xaml.cs 中 LoadApplication() 中的等待,这很奇怪,因为它昨天还在工作,但今天它决定要在等待时抛出异常。