2011-05-19 102 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

相關問題