使用不同的NIB文件扩展UIViewController

时间:2011-02-15 12:24:02

标签: iphone uitableview inheritance uiviewcontroller

好的,我肯定在这里做错了...

我创建了一个BaseViewController,它是包含UITableView的匹配NIB文件的数据源和委托。该控制器几乎负责从远程Web服务获取数据,创建单元格以及填充UITableView。

所以现在我想创建一个SearchViewController,以便我可以获得一个UISearchBar,用户可以输入搜索查询,将其发布到Web服务上,获取结果并填充UITableView。

然而,大多数代码(在检索数据/填充UITableView时)都存在于BaseViewController中。所以我想到的第一件事就是创建SearchViewController作为BaseViewController的扩展,使用不同的NIB文件。

我创建了一个名为SearchView的新NIB文件,其中包含一个UISearchBar和一个UITableView,并将这两个文件与文件所有者IBOutlets相关联。 (UITableView IBOutlet是从BaseViewController继承的)

所以最后在我的MainWindow.xib中我添加了一个TabBarController,并且从IB我已经链接了UINavigationController来加载SearchViewController,View从ViewView加载。当我切换到搜索选项卡时,我收到一个错误的SIG_ABORT:

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

有人能指出我正确的方向如何进行?我相信你们大多数人都在使用UITableView来扩展一个类重用代码。这是正确的方法吗?

1 个答案:

答案 0 :(得分:0)

我不确定我是否完全按照你的描述,但我认为你应该做的是创建你的SearchViewController作为BaseViewController的子类,如

@interface EventListViewController : UIViewController { ... }

这就是“扩展”BaseViewController的意思吗?

然后您使用[[SearchViewController alloc] initWithNibName:@"SearchView" bundle:nil]创建SearchViewController?我通常在app delegate中以编程方式处理我的应用程序的初始视图加载。

你得到的错误听起来像你的IBOutlet连接是错误的。太糟糕了,你不能像发布代码一样轻松地在这里发布一个nib文件。