从超级视图中删除视图时出错

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中调用的

以上是关于从超级视图中删除视图时出错的主要内容,如果未能解决你的问题,请参考以下文章

从 Core Data 管理的表视图中删除对象时出错

从 TableView 中的 CoreData 中删除实体时出错

从列表视图单击项目时出错

如何在运行时从超级视图中删除视图?

从存储过程刷新物化视图时出错(不是有效月份)

足以从超级视图中删除视图?