Ошибка MonoTouch и «у приложений должен быть контроллер корневого представления в конце запуска приложения» - PullRequest
1 голос
/ 07 ноября 2011

Новый стиль приложений в iOS5, где вы должны установить RootViewController в UIWindow, очень меня смущает.

Я скачал последнюю версию библиотеки MonoTouch.Dialog отсюда:

https://github.com/migueldeicaza/MonoTouch.Dialog

Но когда я попытался скомпилировать и запустить включенный проект «Образец» на симуляторе, он вылетает и возвращает следующую ошибку:

Ошибка: приложенияожидается, что в конце запуска приложения будет установлен контроллер корневого представления

Затем я открыл проблему на GitHub:

https://github.com/migueldeicaza/MonoTouch.Dialog/issues/65

Но Мигель ответил мне, что:

Если вы используете новый стиль приложений в iOS5, вы должны установить RootViewController в UIWindow.Это новая функция iOS 5 для очистки, чтобы привести содержимое UIViewController на место.

Я попытался назначить контроллер Navigation приложения Sample для контроллера корневого представления окна, но безрезультатно.Все еще получаю ту же ошибку.Это метод FinishedLaunching включенного примера приложения:

public override bool FinishedLaunching (UIApplication app, NSDictionary options)
    {
        var Last = new DateTime (2010, 10, 7);
        Console.WriteLine (Last);

        var p = Path.GetFullPath ("background.png");
        window.AddSubview (navigation.View);

         //ADDING THE Navigation Controller as RootViewController
        window.RootViewController = navigation; //THIS LINE WAS ADDED BY ME

        var menu = new RootElement ("Demos"){
            new Section ("Element API"){
                new StringElement ("iPhone Settings Sample", DemoElementApi),
                new StringElement ("Dynamically load data", DemoDynamic),
                new StringElement ("Add/Remove demo", DemoAddRemove),
                new StringElement ("Assorted cells", DemoDate),
                new StyledStringElement ("Styled Elements", DemoStyled) { BackgroundUri = new Uri ("file://" + p) },
                new StringElement ("Load More Sample", DemoLoadMore),
                new StringElement ("Row Editing Support", DemoEditing),
                new StringElement ("Advanced Editing Support", DemoAdvancedEditing),
                new StringElement ("Owner Drawn Element", DemoOwnerDrawnElement),
            },
            new Section ("Container features"){
                new StringElement ("Pull to Refresh", DemoRefresh),
                new StringElement ("Headers and Footers", DemoHeadersFooters),
                new StringElement ("Root Style", DemoContainerStyle),
                new StringElement ("Index sample", DemoIndex),
            },
            new Section ("Auto-mapped", footer){
                new StringElement ("Reflection API", DemoReflectionApi)
            },
        };

        var dv = new DialogViewController (menu) {
            Autorotate = true
        };
        navigation.PushViewController (dv, true);               

        window.MakeKeyAndVisible ();

        return true;
    }

Единственная строка кода, которую я добавил, указана в комментариях, но это дополнение, похоже, не устраняет ошибку.Что-то мне не хватает?

Заранее спасибо!

Ответы [ 3 ]

5 голосов
/ 08 ноября 2011

Я обновил образец в MonoTouch.Dialog, чтобы показать, как добавить контроллер представления в системы iOS 4.x и системы 5.x и должен исправить эту проблему.

Короткая версия - это окно.AddSubview (navigation.View) - это способ ведения дел в iOS 4.3, в новых версиях вам необходимо установить свойство window.RootViewController, например:

        if (UIDevice.CurrentDevice.CheckSystemVersion (5, 0))
            window.RootViewController = navigation; 
        else
            window.AddSubview (navigation.View);            
1 голос
/ 08 ноября 2011

Хорошо, похоже, Мигель загрузил новую версию библиотеки.Он прокомментировал коммит с помощью «Обновить до MonoDevelop 2.8».

https://github.com/migueldeicaza/MonoTouch.Dialog/commit/25974c5c28d31c022d232a449ef9fbc766506701

Теперь образец работает нормально (вам все равно необходимо вручную установить MainWindow в качестве основного интерфейса в файле Info.plistчтобы ошибка исчезла. В прошлый раз этого было недостаточно.).

Кажется, что проблема была в настройках проекта, а не в элементе rootviewcontroller.Он прекрасно работает даже без одного конца (может быть, кто-то более эксперт может объяснить эту странную вещь).К сожалению, сообщения об ошибках MonoDevelop вводили в заблуждение!

0 голосов
/ 07 ноября 2011

Попробуйте удалить строку window.AddSubview(navigation.View);.

...