2

我有一个 Storyboard Xcode 项目,我正在努力将选项卡的顺序放置在选项卡栏中。其中有 4 个选项卡。

CurrentLocationViewController,  LocationsViewController, MapViewController and AnimalsViewController

我有一个 Sqlite 数据库,它连接我项目中的 3 个选项卡。位置、标签和地图。

然后我有一个选项卡,它与我项目中的其他 3 个选项卡完全分开。

我希望 AnimalsViewController 或 Animals 选项卡成为我应用程序中的第一个选项卡。我可以将它添加为我的第 4 个标签栏项目没问题,但是当我在界面构建器中将顺序更改为第一个时,我的应用程序崩溃了。

我可以轻松更改标签、位置和地图的顺序,但是当我在开始时引入 Animal 选项卡时它会崩溃。

标签、位置和地图选项卡是相互关联的,而动物选项卡是完全独立的选项卡。

我知道我必须在下面的代码中引用位于我的 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

为了在标签栏控制器中交换第一个和第四个视图控制器,请使用以下代码:

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 回答