通过Interface Builder实现UITableViewController实例化

时间:2011-01-20 17:06:46

标签: iphone ios uitableview

我从这里开始iOS开发,并在我的项目中集成Interface Builder。

我会有一个问题,这是我现在正在经历的问题,但我不确定我是否正确地做到了。

第一案例

我在IB中创建了所有UITableViewController,然后将类更改为我的自定义CurrencyTableViewController。因此,要在window.rootViewController MainWindow_iPhone.xib内添加此内容,我只是在AppDelegate内直接创建变量,并调用在另一个.xib文件中创建的实例。这很好用,但我关注的一个问题是内存管理。

//Use the instance initiated by IB
CurrencyTableViewController *currencyTableViewController    = [[[NSBundle mainBundle] loadNibNamed:@"CurrencyTableView" owner:nil options:nil] objectAtIndex:0];

所以问题是:通过使用上面的方法加载在IB上创建的实例,它们会在那之后自动释放吗?或者我需要在其他地方宣布它吗?

第二案例

第二种情况是尝试考虑如何释放对象的替代方案,因此创建实例而不是使用已创建的一个实例。但不幸的是,它似乎抛出一个错误,表示我没有将视图附加到控制器。这让我觉得UITableViewController即使是UIViewController的子类也不支持initWithNibName方法......至少在文档中没有声明这一点。

//Fails with: *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: '-[UIViewController _loadViewFromNibNamed:bundle:] loaded the "CurrencyTableView" nib but the view outlet was not set.'*** Call stack at first throw:
CurrencyTableViewController *currencyTableViewController    = [[CurrencyTableViewController alloc] initWithNibName:@"CurrencyTableView" bundle:nil];

那么,有人可以确认它是否确实不受支持,并且创建对象并将其附加到nib文件的唯一可能方法是该元素是UIViewController吗?如果没有,代码如何工作?

提前感谢您的支持和时间。

1 个答案:

答案 0 :(得分:0)

关于第一个案例

似乎当你从IB创建某些内容时,它会自动释放,但不确定。

关于第二种情况

它无法正常工作,因为控制器也位于nib上,因此以编程方式创建CurrencyTableViewController实例的第一个内容是另一个CurrencyTableViewController,而不是视图。所以你可以删除控制器,只需将tableView本身留在nib中,或者将实例声明为nib元素的表示,就像第一种情况一样。

如果有人有不同的选择,请告诉我。