2011-03-30 128 views
0

我想從TabBarController加載筆尖。我正在通過分配selectedIndex來完成此操作。通過索引加載的ViewController在TabBarController所在的MainWindow.xib中指定,指定要在每個選項卡欄項中加載的Nib的名稱。加載工作,但如果我在ViewController中創建一個IBOutlet來加載並將其鏈接到任何東西(IBOutlet的對象可以是任何類),那麼它會在我分配selectedIndex的行中崩潰。加載從UITabBarController的筆尖問題

編輯>> 我有應用程序委託,它包含一個UITabBarController鏈接到在MainWindow.xib中創建的UITabBarController對象。

在那個UITabBarController對象中有一些標籤欄項目,每個鏈接到不同的UIViewControllers。這些鏈接通過屬性NIB名稱建立。

我試圖測試第一個項目鏈接到一個空的UIViewController,在這種情況下,我叫TestViewController(TestViewController.h,TestViewController.m和TestViewController.xib創建)。我在第一個選項卡欄Item的NIB Name屬性中編寫了TestViewController。有用。

現在我把一個IBOutlet UILabel放在TestViewController中。我在TestViewController.h中像這樣定義它:

#import <UIKit/UIKit.h> 


@interface TestViewController : UIViewController { 
    UILabel *label; 
} 

@property (nonatomic, retain) IBOutlet UILabel *label; 

@end 

然後我在TestViewController.m中綜合標籤對象。我將一個UILabel放在TestViewController.xib中。它仍然有效。

然後我將TestViewController中定義的標籤對象鏈接到我在NIB文件中創建的UILabel。我編譯和測試。它不起作用。它在我將selectedIndex分配給應用程序委託中定義的UITabBarController的部分中崩潰。分配是這樣做的:

self.tabBarController.selectedIndex = 0; 

我使用0,因爲我只用第一個選項卡欄項目進行測試。它與SIGABRT信號崩潰。

任何想法,爲什麼會發生這種情況?

回答

0

問題解決了。我忘了將鏈接到Tab Bar Item的UIViewController更改爲TestViewController。

0

您的問題通過編輯得到顯着改善。根據你所告訴我們的情況,很難明確地說明爲什麼會發生事故,但我可以指出你正確的方向。

您已經找到導致崩潰的行,這是一個好的開始。在該行放置一個斷點並調試應用程序。當你點擊斷點時,看看self.tabBarController。它是零嗎?如果不是,它的viewControllers數組中有多少個對象?如果有一個或多個,請查看您的TestViewController。在它的-loadView方法或UIViewController -loadView上放置一個斷點。即使你看不到 - [UIViewController loadView]的源代碼,你仍然可以觀察它的效果:當你到達方法的結尾時,視圖控制器的視圖屬性應該是非零。

此外,發生這種崩潰後,請查看控制檯。通常會有一條錯誤消息告訴你爲什麼應用程序崩潰。

+0

謝謝。我認爲這給了我一個提示。 viewControllers數組沒有對象。 UIViewController沒有進入init或loadView。我不這是爲什麼,它只發生在我將IBOutlet鏈接到UILabel時。 – jglievano 2011-03-30 23:04:47