为什么"抛出Objective-C异常。名称:NSInternalInconsistencyException原因:无法加载NIB ..."在xamarin ios

时间:2018-05-25 05:49:45

标签: c# xamarin.ios navigation viewcontroller

我是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)
        {

        }
    }
}

1 个答案:

答案 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。

解决方法1

从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。

解决方法2

使用Storyboard创建viewController,您可以将ViewController从Toolbox拖到设计器,指定Class并提供Storyboard ID。

enter image description here

在AppDelegate中修改初始化viewcontroller的方式。

//viewController = new LoginViewController();
viewController = UIStoryboard.FromName("LoginViewController",null).InstantiateViewController("LoginViewController");

一件小事

WindowAppDelegate中的全局变量,在整个应用程序中使用,您永远不应创建局部变量UIWindow,只需使用默认的Window