0

私のUIViewControllerのviewdidloadメソッドを表示するには、次のコードが呼び出されています。非同期でアクティビティインジケータを表示しています

私はUINavigationControllerを持っています。これは、前述のコントローラでインスタンス化されていて、UINavigationControllerはUITabViewController内に配置されていて、それはrootviewcontrollerとして割り当てられています。

コントローラの内部データをテーブルに取り込むために非同期のWeb呼び出しを行っています。ローディングビューコードを使用してアクティビティインジケータを表示すると、モノタッチで次の警告が表示されます。

アプリケーションは

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; 

全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

AppDelegateでFinishedLaunchingメソッドを表示できますか?これは通常、そのエラーがスローされます。 iOS 5では、RootViewControllerを割り当てる必要があります(例:window.RootViewController = MyTabBarController; – Anuj

+0

今見て、あなたが提案したことをやってください。 – RubbleFord

+1

FinishedLaunching()を完全に投稿してください。私の最高の推測では、あなたのtabConrollerはNULLです。 – Krumelur

答えて

0

(iOS5を中)この警告を回避し、あなたのFinishedLaunchingメソッド内で、次の操作を行うことができたiOS 4.xの互換性を保つために:

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アップルはiOS5 +の警告(問題)を示していますが、iOS4以降は利用可能であるため、条件なしで割り当てることができます。 – poupou

0

window.AddSubview(tabcontroller.view);

rootviewcontrollerをもう設定していないという問題を修正しました。

関連する問題