0

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

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

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

Приложения должны иметь контроллер вида корень в конце запуска приложения

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); 
    } 
} 

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

EDIT: Я уже устанавливаю контроллер корневого представления.

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

Полный AppDelegate код:

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; 
     } 
+0

Можете ли вы показать метод FinishedLaunching в AppDelegate? Здесь обычно возникает ошибка. В iOS 5 вам необходимо назначить RootViewController, например: window.RootViewController = MyTabBarController; – Anuj

+0

Посмотрите сейчас, уже делайте то, что вы предлагаете. – RubbleFord

+1

Пожалуйста, разместите полную версию FinishedLaunching(). Лучше всего предположить, что ваш tabConroller имеет значение NULL. – Krumelur

ответ

0

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

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

Посмотрите here для более полного образца.

+0

Просто попробовал предложить еще одну проблему. – RubbleFord

+0

window.RootViewController уже доступен в iOS4, так что это не проблема. – Krumelur

+0

@ Krumelur IIRC Apple показывает это предупреждение (проблема) только на iOS5 +, но вы правы, он доступен с iOS4, поэтому вы можете просто назначить его без условия. – poupou

0

window.AddSubview (tabcontroller.view);

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

Смежные вопросы