0

我的印象是向视图添加子视图是这样的:

UITableViewController *sitesel = [[UITableViewController alloc] initWithStyle:UITableViewStyleGrouped];
sitesel.view.frame = CGRectMake(0,0,100,100);
[self.left addSubview:sitesel.view];
[sitesel release];

但似乎我不应该释放sitesel(控制器)?所以我应该释放视图还是什么,我之前已经确定了这个保留的东西,但是它已经滑倒了。(并且要使用 TableView,您必须继承 UITableViewController 对吗?)

(self.left 是 self.view 的子视图,添加在 nib 中)

4

1 回答 1

1

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 工作。它只是简单得多!

于 2010-08-30T13:28:36.260 回答