【问题标题】:Why "Objective-C exception thrown. Name: NSInternalInconsistencyException Reason: Could not load NIB in …" in xamarin ios为什么“抛出Objective-C异常。名称:NSInternalInconsistencyException原因:无法在...中加载NIB”在xamarin ios中
【发布时间】:2018-05-25 05:49:45
【问题描述】:

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

        }
    }
}

【问题讨论】:

    标签: c# xamarin.ios navigation viewcontroller


    【解决方案1】:

    Objective-C 抛出异常。名称:NSInternalInconsistencyException 原因:无法在…中加载 NIB

    如果您使用 viewController = new LoginViewController(); 初始化 viewController,并且该类具有构造函数 public LoginViewController() :base("LoginViewController",null),运行时会查找.xib文件,但是Visual Studio从15.7开始删除了viewController with xib的模板,必须用storyboard创建viewcontroller,所以报错。

    您可以按照这个tutorial 来实现和以前一样的方式。


    但我们强烈建议您创建如下视图控制器。

    解决方法 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。

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

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

    一件小事

    WindowAppDelegate中的全局变量,在整个应用程序中使用,你不应该创建一个局部变量UIWindow,使用默认的Window

    【讨论】:

    • 嗨,有没有帮助?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-06
    • 1970-01-01
    • 2012-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多