这真的让我陷入了困境。我为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");
}
}
}
我无处可去思考 - 有没有人遇到过这个?
答案 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() 中的等待,这很奇怪,因为它昨天还在工作,但今天它决定要在等待时抛出异常。