2011-05-19 42 views
0

我正在为iPhone和iPad开发具有单独视图的多设备应用程序。在我的应用程序中,我使用带有四个内容标签的UITabBarController作为mainView。
第一个选项卡包含一个UINavigationController,第二个选项卡包含一个UIViewController。第三个选项卡与第一个选项卡类似,但具有其他NIB和类文件。第四个选项卡与第二个选项卡相似,但包含其他内容。UITabBarController在应用程序启动时加载两个选项卡

在每一个viewDidLoad方法中,我写了一些东西,像“[currentview]被加载”一样,并且currentview被替换为加载的视图的标识名称。
如果我在iPhone上启动我的应用程序,然后控制台显示我没有任何用户交互,第一个选项卡和第三个选项卡(都是UINavigationController)都加载了。详细地说,第三个标签在第一个标签之前加载。
如果我在iPad中启动我的应用程序,那么只有第一个选项卡会像它应该加载一样。除了实现针对iPad的NIB文件,我在我的应用程序开始时使用相同的源代码。

在AppDelegate_iPhone.m中,我只将UITabBarController.view作为子视图添加到窗口中。在AppDelegate_iPad.m中完成相同的过程

我已经对此进行了搜索并发现调用controllers.view导致加载视图,但编程方式我既不调用第一个选项卡的视图也不调用第三个选项卡。这是由UITabBarController以他自然的方式完成的(没有改变这个控制器的任何东西)。所以我有点困惑为什么我的应用程序加载iPhone上的第三个标签。由于这个问题,我不得不删除一些在第三个标签的viewDidLoad中完成的代码,因为这个代码只有在标签几乎要显示的时候才起作用。

我希望任何人都有同样的问题,并可以告诉我一个解决方案或提示。

回答

0

最后我发现我的错误。
使用UITabBarController创建一个新项目,并使用给定星座的四个选项卡显示该错误不是一般性错误。在意识到这一点之后,我一步一步浏览了我的MainWindow_ [ver] .xib,比较了iPhone和iPad版本之间的差异。
我发现在MainWindow_iPhone.xib中,第三个选项卡被声明为UINavigationController。在这个NavigationController中,我有一个UITableViewController,其内容来自通过Interface Builder链接的class/nib。与MainWindow_iPad.xib(未发生错误的地方)相比,我发现我在iPad版本中使用了UIViewController而不是UITableViewController。
将iPhone版本更改为UIViewController后,该错误消失。 Hooray :)

要批准如果每次在另一个选项卡中使用UITableViewController时发生此错误,我将编辑新创建的项目,并将第三个选项卡UIViewController(在UINavigationController中)更改为UITableViewController。如预期的那样,第三个标签在第一个标签之前加载。
附加信息:尽管在MainWindow_ [ver] .xib中我声明了要加载的UIViewController,但具体实现是UITableViewController子类。似乎工作,因为UITableViewController是UIViewController的子类,但仍然奇怪为什么超类必须指定在MainWindow_ [ver] .xib

相关问题