Почему «Возникло исключение Objective C. Имя: NSInternalInconsistencyException Причина: не удалось загрузить NIB в…» в xamarin ios - PullRequest
0 голосов
/ 25 мая 2018

Я новичок в 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 голосов
/ 28 мая 2018

Исключение Objective-C выброшено.Имя: NSInternalInconsistencyException Причина: не удалось загрузить NIB в…

Если вы инициализируете viewController с помощью viewController = new LoginViewController();, а класс имеет конструкторы public LoginViewController() :base("LoginViewController",null), он будет искать файл .xib при запуске,но Visual Studio удалил шаблон viewController with xib, начиная с 15.7, вы должны создать viewcontroller с раскадровкой, чтобы произошла ошибка.

Вы можете следовать этому учебнику , чтобы реализовать способ, как и раньше.


Но мы настоятельно рекомендуем вам создать 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
    }
}

Но таким образом вы должны программно управлять пользовательским интерфейсом.

Обходной путь 2

Создайте viewController с раскадровкой, вы можете перетащить ViewController из панели инструментов в конструктор, указать класс и предоставить идентификатор раскадровки.

enter image description here

В AppDelegate измените способ инициализации контроллера представления.

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

Небольшая вещь

Window является глобальной переменной в AppDelegate и используетсяво всем приложении никогда не следует создавать локальную переменную UIWindow, просто используйте значение по умолчанию Window.

...