2

Storyboard Xcode プロジェクトがあり、Tabbar にタブの順序を配置するのに苦労しています。4つのタブがあります。

CurrentLocationViewController,  LocationsViewController, MapViewController and AnimalsViewController

プロジェクトの 3 つのタブを接続する Sqlite データベースがあります。場所、タブ、マップ。

次に、プロジェクトの他の 3 つのタブとは完全に別のタブがあります。

AnimalsViewController または Animals タブをアプリの最初のタブにしたいです。これを 4 番目のタブバー項目として問題なく追加できますが、インターフェイス ビルダーで最初になるように順序を変更すると、アプリがクラッシュします。

タグ、場所、マップの順序を簡単に変更できますが、最初に動物タブを導入するとクラッシュします。

タグ、場所、マップのタブは相互に接続されており、動物タブは完全に別のタブです。

以下のコードで、AppDelegate にあるタブを参照し、AnimalsViewController.h を含める必要があることはわかっていますが、役に立ちませんでした。

以下は私のコード、写真、エラーログです。

  2013-04-08 16:38:08.075 ShotPlacementGuide[5077:c07] -[AnimalsViewController  viewControllers]: unrecognized selector sent to instance 0xae8dc90
  2013-04-08 16:38:08.077 ShotPlacementGuide[5077:c07] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[AnimalsViewController viewControllers]: unrecognized selector sent to instance 0xae8dc90'
  *** First throw call stack:
  (0x24a9012 0x1c5ce7e 0x25344bd 0x2498bbc 0x249894e 0x2443 0xb01157 0xb01747 0xb0294b 0xb13cb5 0xb14beb 0xb06698 0x1fc9df9 0x1fc9ad0 0x241ebf5 0x241e962 0x244fbb6 0x244ef44 0x244ee1b 0xb0217a 0xb03ffc 0x222d 0x2155)
  libc++abi.dylib: terminate called throwing an exception
  (lldb) 

これが私のコードです:

   UITabBarController *tabBarController = (UITabBarController *) self.window.rootViewController;

    UINavigationController *navigationController = (UINavigationController *) [[tabBarController viewControllers] objectAtIndex:0];

    CurrentLocationViewController *currentLocationViewController = (CurrentLocationViewController *) [[navigationController viewControllers] objectAtIndex:0];
    currentLocationViewController.managedObjectContext = self.managedObjectContext;

    navigationController = (UINavigationController *) [[tabBarController viewControllers] objectAtIndex:1];

    LocationsViewController *locationsViewController = (LocationsViewController *) [[navigationController viewControllers] objectAtIndex:0];
    locationsViewController.managedObjectContext = self.managedObjectContext;

    MapViewController *mapViewController = (MapViewController *) [[tabBarController viewControllers] objectAtIndex:2];

    mapViewController.managedObjectContext = self.managedObjectContext;

ここに画像の説明を入力

ここに画像の説明を入力

4

1 に答える 1

1

タブ バー コントローラーの最初と 4 番目のビュー コントローラーを交換するには、次のコードを使用します。

UITabBarController *tabBarController = (UITabBarController *) self.window.rootViewController;    
NSMutableArray* viewControllers = [[tabBarController viewControllers] mutableCopy];    
[viewControllers exchangeObjectAtIndex:0 withObjectAtIndex:3];    
[tabBarController setViewControllers:viewControllers];
于 2013-04-08T15:37:23.340 に答える