addSubview
确实保留了观点,那不是问题。您的问题是视图的控制器稍后会消失。
你不应该发布视图,因为那不关你的事。你没有创造它,你没有触摸它。不要管它。
为了保持工作正常,它需要保持连接到有效的控制器。因此,您不得释放控制器,而应将其保留在身边。在释放控制器之前添加一个属性@property(retain) UITableViewController *siteController;
,然后执行。self.siteController = sitesel;
这样,一切都留在记忆中。
PS:为了清洁,您可能应该更改站点访问器中的视图。只是为了确保它总是沿着控制器来来去去。然后,您的方法会变得更短,只需设置控制器。
添加:该设置器可能看起来像这样,要求您仅设置控制器和透明更新的视图:
- (void)setSiteselController:(UITableViewController *)ctrl {
if (_sitesel)
[_sitesel.view removeFromSuperview];
[_sitesel autorelease];
_sitesel = [ctrl retain];
if (_sitesel) {
_sitesel.view.frame = CGRectMake(0,0,100,100);
[self.left addSubview: _sitesel.view];
}
}
然后,您的原始代码将缩小到这个更清晰的版本:
UITableViewController *sitesel = [[UITableViewController alloc] initWithStyle: UITableViewStyleGrouped];
self.siteselController = sitesel;
[sitesel release];
PPS:你不需要一个控制器来让 UITableView 工作。它只是简单得多!