我是xamarin ios的新手,我的应用程序在运行应用程序时崩溃并抛出异常"抛出Objective-C异常。名称:NSInternalInconsistencyException原因:无法加载NIB ..."。如何管理它..
请帮帮我......
这是我的代码ViewController
public partial class LoginViewController : UIViewController
{
public LoginViewController(IntPtr handle) : base(handle)
{
}
public LoginViewController() :base("LoginViewController",null)
{
}
public override void DidReceiveMemoryWarning()
{
// Releases the view if it doesn't have a superview.
base.DidReceiveMemoryWarning();
// Release any cached data, images, etc that aren't in use.
}
#region View lifecycle
public override void ViewDidLoad()
{
base.ViewDidLoad();
}
public override void ViewWillAppear(bool animated)
{
base.ViewWillAppear(animated);
}
public override void ViewDidAppear(bool animated)
{
base.ViewDidAppear(animated);
}
public override void ViewWillDisappear(bool animated)
{
base.ViewWillDisappear(animated);
}
public override void ViewDidDisappear(bool animated)
{
base.ViewDidDisappear(animated);
}
partial void Btn_Login_TouchUpInside(UIButton sender)
{
}
#endregion
}
这是我的AppDelegate
public override bool FinishedLaunching(UIApplication application, NSDictionary launchOptions)
{
UIWindow window;
UINavigationController navigationController;
UIViewController viewController;
window = new UIWindow(UIScreen.MainScreen.Bounds);
viewController = new LoginViewController();
navigationController = new UINavigationController();
navigationController.PushViewController(viewController, false);
window.RootViewController = navigationController;
window.MakeKeyAndVisible();
return true;
}
我在Main.cs中有一个例外
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.
try
{
UIApplication.Main(args, null, "AppDelegate");
}
catch(System.Exception ex)
{
}
}
}
答案 0 :(得分:0)
抛出Objective-C异常。名称:NSInternalInconsistencyException原因:无法在...中加载NIB
如果您使用viewController = new LoginViewController();
初始化viewController,并且该类具有构造函数
public LoginViewController() :base("LoginViewController",null)
,它会在运行时查找.xib
文件,但Visual Studio从15.7开始删除了viewController with xib
的模板,您必须创建包含storyboard的viewcontroller,因此会发生错误。
您可以按照此tutorial的方式实施以前的方式。
但我们强烈建议您按如下所示创建viewcontroller。
从UIViewController创建一个新类继承(只有一个.cs
)
[Register("LoginViewController")]
public class LoginViewController : UIViewController
{
public LoginViewController()
{
}
public override void ViewDidLoad()
{
base.ViewDidLoad();
this.View.BackgroundColor = UIColor.Red;
// Perform any additional setup after loading the view
}
}
但是这样你就必须以编程方式管理UI。
使用Storyboard创建viewController,您可以将ViewController
从Toolbox拖到设计器,指定Class并提供Storyboard ID。
在AppDelegate中修改初始化viewcontroller的方式。
//viewController = new LoginViewController();
viewController = UIStoryboard.FromName("LoginViewController",null).InstantiateViewController("LoginViewController");
Window
是AppDelegate
中的全局变量,在整个应用程序中使用,您永远不应创建局部变量UIWindow
,只需使用默认的Window
。