Подтвердить что ты не робот

Совместимость не с ключевыми значениями (Monotouch и iOS 6)

Я только что обновил свой Monotouch до 6, и теперь мое приложение не запустится. Он работал раньше без каких-либо проблем. Теперь он генерирует исключение (указанное ниже) в файле Main.cs. Я просмотрел советы по устранению неполадок на Xamarin, но это не решило проблему. Я повторно выложил файл nib, удалил и повторно настроил свои выходные данные, и создал совершенно новый наконечник, чтобы понять, устранит ли это проблему. У кого-нибудь еще есть мысли?

MonoTouch.Foundation.MonoTouchException: Objective-C exception thrown.  Name: NSUnknownKeyException Reason: [<UIApplication 0xc84bb10> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key btnNewAccount.
   at (wrapper managed-to-native) MonoTouch.UIKit.UIApplication:UIApplicationMain (int,string[],intptr,intptr)
   at MonoTouch.UIKit.UIApplication.Main (System.String[] args, System.String principalClassName, System.String delegateClassName) [0x0004c] in /Developer/MonoTouch/Source/monotouch/src/UIKit/UIApplication.cs:38
   at Pokr.Application.Main (System.String[] args) [0x00000] in /Users/James/Projects/App/Main.cs:17

Код из LoginView.designer.cs:

[Register ("LoginView")]
partial class LoginView
{
    [Outlet]
    MonoTouch.UIKit.UIImageView imgLogo { get; set; }

    [Outlet]
    MonoTouch.UIKit.UITextField txtEmail { get; set; }

    [Outlet]
    MonoTouch.UIKit.UITextField txtPassword { get; set; }

    [Outlet]
    MonoTouch.UIKit.UIButton btnLogin { get; set; }

    [Outlet]
    MonoTouch.UIKit.UIButton btnNewAccount { get; set; }

    [Outlet]
    MonoTouch.UIKit.UILabel lblSecurityNotice { get; set; }

    [Outlet]
    MonoTouch.UIKit.UIImageView imgKeyboardBorder { get; set; }

    void ReleaseDesignerOutlets ()
    {
        if (imgLogo != null) {
            imgLogo.Dispose ();
            imgLogo = null;
        }

        if (txtEmail != null) {
            txtEmail.Dispose ();
            txtEmail = null;
        }

        if (txtPassword != null) {
            txtPassword.Dispose ();
            txtPassword = null;
        }

        if (btnLogin != null) {
            btnLogin.Dispose ();
            btnLogin = null;
        }

        if (btnNewAccount != null) {
            btnNewAccount.Dispose ();
            btnNewAccount = null;
        }

        if (lblSecurityNotice != null) {
            lblSecurityNotice.Dispose ();
            lblSecurityNotice = null;
        }

        if (imgKeyboardBorder != null) {
            imgKeyboardBorder.Dispose ();
            imgKeyboardBorder = null;
        }
    }

Код из Main.cs(где разрывается код):

    static void Main (string[] args)
    {
        UIApplication.Main (args, null, "AppDelegate");
    }

Вот фрагмент из моего AppDelegate, где я вызываю ViewController:

        var rootNavigationController = new UINavigationController();

        LoginView loginScreen = new LoginView();
        rootNavigationController.PushViewController(loginScreen, false);

        this.window.RootViewController = rootNavigationController;

        //blank function fires so the getter will init the singleton.
        Singleton.Instance.Initialize();

        // make the window visible
        window.MakeKeyAndVisible ();


        return true;
4b9b3361

Ответ 1

Эта ошибка возникает, когда вы инициализировали код ViewController, но также инициализировали ViewController из XIB файла.

Это может произойти, если для параметра "Основной интерфейс" установлено значение ViewController, которое вы создаете в коде. Чтобы устранить эту проблему, сделайте это значение пустым, а затем ViewController будет автоматически инициализировано.

Также проверьте файл pInfo, чтобы узнать, есть ли основной интерфейс.

Благодаря @Bart для предоставления этого совета пользователям Xamarin:

Щелкните правой кнопкой мыши проект в Xamarin Studio (v.4), выберите 'Options', а затем под 'iOS Project' (раздел 'iPad Deployment info'). Снимите раскрывающийся список 'Main Interface' и это должно решить проблему.

Ответ 2

Это говорит вам причину: [<UIApplication 0xc84bb10> setValue:forUndefinedKey:]. Обратите внимание, что это не говорит: [<LoginView 0xc84bb10> setValue:forUndefinedKey:]. Теперь вам нужно выяснить, что пытается отправить сообщение -setBtnNewAccount: в экземпляр UIApplication.

Похоже, что делегат где-то установлен неправильно.

Ответ 3

У меня были аналогичные проблемы с созданием выходов из кнопок, таким образом удаляя их и создавая выходы из них. Где-то синхронизация между XCode и Xamarin не была полностью выполнена правильно...

Исправить для меня было удаление кнопок, а затем поиск и удаление всех ссылок в файлах конструктора вручную.

Надеюсь, что это поможет...

Ответ 4

Я столкнулся с этой проблемой даже в недавней сборке Xamarin Studio (5.9.5). Параметр "Синхронизация с Xcode" был выделен серым цветом, но, очевидно, мой файл ViewController xib в Tamarin не синхронизировался с Xcode.

Исправление было таким же, как упоминалось Hutjepower. Я искал сломанную ссылку в Xamarin Studio, открыл файл xib внутри Xamarin (щелкните правой кнопкой мыши на файле и используйте редактор исходного кода), а затем удалил элементы управления, которые я удалил через Xcode. Это исправило эту проблему.

Ответ 5

У меня возникла проблема с Xamarin Studio 5.10.1; В конце концов я обнаружил, что если бы я использовал текстовый редактор для редактирования моего файла раскадровки и удалил все в

<connections></connections>

он исправил проблему для меня.