从超级视图中删除视图时出错
Posted
技术标签:
【中文标题】从超级视图中删除视图时出错【英文标题】:Error when remove a view from superview 【发布时间】:2012-04-10 11:12:28 【问题描述】:我是 ios 开发的新手,遇到问题想请教您。
我的目的是在基本视图上显示一个视图(不是全屏),并且仍然在子视图外的背面看到父级。 所以我在当前视图控制器上添加了一个子视图(UIViewController 的子类),然后我打开子视图:
AViewController *a = [[AViewController alloc] initWithNibName:nil bundle:nil];
[self.view addSubView:a.view];
[a release];
在这里它可以正常工作并按我的预期显示这个子视图。在这个子视图上,我有关闭按钮来关闭这个子视图并在子视图上这样做:
- (IBAction)BackTouchUp:(id)sender
[self.view removeFromSuperview];
当我单击关闭按钮时,我收到错误 EXC_BAD_ACCESS。当我删除父级上的 [a release] 命令时,它可以工作,但存在内存泄漏。
能否请您解释一下这个错误的原因以及如何解决这个问题?
【问题讨论】:
【参考方案1】:在接口和实现中定义AViewController
对象(AViewController *a),初始化值如下:
a = [[AViewController alloc] initWithNibName:nil bundle:nil];
[self.view addSubView:a.view];
只要你想删除,只需将[a removeFromSuperview]
和在 dealloc 中
[a release];
【讨论】:
感谢您的回答。如您所说, a 是父级的实例变量,不是吗?但是 [a removeFromSuperview] 在子视图的代码中,我如何访问父视图的变量? 通过委托方法,创建自定义委托或发布通知。【参考方案2】:你可以设置一个视图标签没有
[a.view setTag:3];
uiView *f=[self.view viewWithTag:3];
[f removeFromSuperview];
我认为这会解决你的问题
【讨论】:
我猜是在AViewController中调用的以上是关于从超级视图中删除视图时出错的主要内容,如果未能解决你的问题,请参考以下文章