我从这里开始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
吗?如果没有,代码如何工作?
提前感谢您的支持和时间。
答案 0 :(得分:0)
关于第一个案例:
似乎当你从IB创建某些内容时,它会自动释放,但不确定。
关于第二种情况
它无法正常工作,因为控制器也位于nib上,因此以编程方式创建CurrencyTableViewController
实例的第一个内容是另一个CurrencyTableViewController
,而不是视图。所以你可以删除控制器,只需将tableView
本身留在nib中,或者将实例声明为nib元素的表示,就像第一种情况一样。
如果有人有不同的选择,请告诉我。