2011-02-15 51 views
0

好一個UIViewController,我肯定在這裏做得不對...擴展使用不同的NIB文件

我已創建一個BaseViewController它是一個包含一個UITableView的匹配NIB文件的數據源和委託。該控制器非常負責從遠程Web服務獲取數據,創建單元格以及填充UITableView。

所以現在我想創建一個SearchViewController,這樣我就可以得到一個UISearchBar,用戶可以輸入一個搜索查詢,將其發佈到Web服務上,獲得結果並填充一個UITableView。

然而,大部分代碼(在檢索數據/填充UITableView中)存在於BaseViewController中。所以我想到的第一件事就是創建SearchViewController作爲BaseViewController的擴展,並使用不同的NIB文件。

我已經創建了一個名爲新NIB文件搜索查看包含一個UISearchBar和一個UITableView和鏈接這兩個與文件所有者IBOutlets。 (該IBOutlet中的UITableView正在從BaseViewController繼承)

所以最後在我的MainWindow.xib我添加了一個TabBarController從IB我已經掛了UINavigationController的加載與查看來自搜索查看加載的SearchViewController。當我切換到搜索選項卡,我得到一個SIG_ABORT錯誤:

-[UITableViewController loadView] loaded the "SearchView" nib but didn't get a UITableView

任何人都可以點我如何進行正確的方向?我相信你們大多數人在做UITableView的東西時都是通過擴展一個類來重用代碼。這是正確的方法嗎?

+0

基於錯誤,我假設BaseViewController從UITableViewController中得出(其中中有一個「的tableView」字段。)根據您的描述我猜BaseViewController也有它「的tableView」字段。這些假設和猜測是否正確? 在SearchViewController nib中,連接到UIViewControllers「view」outlet的是什麼? – 2011-02-15 13:03:37

回答

0

我不知道,我按照你的描述完全相符,但我認爲你應該做的是創建SearchViewController作爲BaseViewController的一個子類,像

@interface EventListViewController : UIViewController { ... } 

是你的「擴展」的意思BaseViewController?

然後你使用[[SearchViewController alloc] initWithNibName:@"SearchView" bundle:nil]來創建你的SearchViewController?我通常會在應用程序委託中以編程方式處理我的應用程序的初始視圖加載。

您聽到的錯誤聽起來像您的IBOutlet連接錯誤。太糟糕了,您不能像發佈代碼那樣輕鬆地發佈nib文件。

+0

對不起,這正是我正在做的。我是繼承BaseViewController。 (對不起,我來自不同的編程背景:))那麼問題可能是我沒有調用initWithNibName,因爲SearchViewController是從一個帶有TabBarController的NIB加載的。在我的MainWindow.xib中,我添加了一個帶有4個TabBar項目的TabBarController。搜索選項卡欄是一個導航控制器,我設置了UINavigationController來加載NIB「SearchView」... – mobius 2011-02-15 12:54:26

相關問題