Monotouch Async и отображение индикатора активности

У меня есть следующий код, вызываемый для просмотра метода viewdidload внутри моего UIViewController.

Внутри appdelegate у меня есть UINavigationController, экземпляр которого создается с помощью этого вышеупомянутого контроллера, и, в свою очередь, UINavigationController помещается внутрь UITabViewController, который, в свою очередь, назначается в качестве rootviewcontroller.

Внутри контроллера я делаю асинхронный веб-вызов, чтобы получить данные для заполнения таблицы, если я использую код представления загрузки для отображения индикатора активности, я получаю следующее предупреждение в monotouch.

Ожидается, что приложения будут иметь корневой контроллер представления в конце запуска приложения

public class LoadingView : UIAlertView
{
    private UIActivityIndicatorView _activityView;

    public void ShowActivity (string title)
    {
        Title = title;

        this.Show();
        // Spinner - add after Show() or we have no Bounds.
        _activityView = new UIActivityIndicatorView (UIActivityIndicatorViewStyle.WhiteLarge);
        _activityView.Frame = new RectangleF ((Bounds.Width / 2) - 15, Bounds.Height - 50, 30, 30);
        _activityView.StartAnimating ();
        AddSubview (_activityView);

    }

    public void Hide ()
    {
        DismissWithClickedButtonIndex (0, true);
    }
}

Любые указатели будут с благодарностью получены.

РЕДАКТИРОВАТЬ: я уже устанавливаю контроллер корневого представления.

window = new UIWindow (UIScreen.MainScreen.Bounds);
        window.RootViewController = tabController;

Полный код делегата приложения:

public override bool FinishedLaunching (UIApplication app, NSDictionary options)
        {
            // create a new window instance based on the screen size
            window = new UIWindow (UIScreen.MainScreen.Bounds);

            tabController = new UITabBarController();

            jobsNavigationController = new UINavigationController(new JobsController());
            jobsNavigationController.NavigationBar.BarStyle = UIBarStyle.Black;
            jobsNavigationController.TabBarItem.Image = UIImage.FromFile("Images/briefcase.png");
            jobsNavigationController.TabBarItem.Title = "Current Positions";

            myAccountNavigationController = new UINavigationController(new LoginDialogViewController());
            myAccountNavigationController.NavigationBar.BarStyle = UIBarStyle.Black;
            myAccountNavigationController.TabBarItem.Image = UIImage.FromFile("images/man.png");
            myAccountNavigationController.TabBarItem.Title = "My Account";

            tabController.SetViewControllers(new UIViewController[] { jobsNavigationController,myAccountNavigationController,new SettingsDialogViewController()},false);

            window.RootViewController = tabController;

            // make the window visible
            window.MakeKeyAndVisible (); 
            return true;
        }

person RubbleFord    schedule 02.02.2012    source источник
comment
Можете ли вы показать метод FinishedLaunching в AppDelegate? Вот где обычно выдается эта ошибка. В iOS 5 вам необходимо назначить RootViewController, например: window.RootViewController = MyTabBarController;   -  person Anuj    schedule 03.02.2012
comment
Взгляните сейчас, уже делая то, что вы предлагаете.   -  person RubbleFord    schedule 03.02.2012
comment
Пожалуйста, опубликуйте свой полный FinishedLaunching(). Я думаю, что ваш tabConroller равен NULL.   -  person Krumelur    schedule 03.02.2012
comment
Будет сделано, как только я вернусь домой, хотя экземпляр tabController создается как переменная уровня члена. Чтобы избавиться от ошибки, все, что мне нужно сделать, это удалить вызов Loadingview.ShowActivity.   -  person RubbleFord    schedule 03.02.2012


Ответы (2)


Чтобы избежать этого предупреждения (в iOS5) и сохранить совместимость с iOS 4.x, вы можете сделать следующее внутри своего метода FinishedLaunching:

if (UIDevice.CurrentDevice.CheckSystemVersion (5, 0))
    window.RootViewController = navigation; 
else
    window.AddSubview (navigation.View);

См. здесь более полный пример.

person poupou    schedule 02.02.2012
comment
window.RootViewController уже доступен в iOS4, так что это не может быть проблемой. - person Krumelur; 03.02.2012
comment
@Krumelur IIRC Apple показывает это предупреждение (проблему) только на iOS5+, но вы правы, оно доступно с iOS4, поэтому вы можете просто назначить его без условия. - person poupou; 03.02.2012

window.AddSubview(tabcontroller.view);

Исправлена ​​проблема, странно, что я больше не устанавливаю rootviewcontroller.

person RubbleFord    schedule 04.02.2012