2011-11-28 50 views
3

我有一个UIView元素,我将其添加到主视图控制器。将调用removeFromSuperview两次导致崩溃或副作用

由于我的代码的设计,所以碰巧removeFromSuperview在我的代码的不同位置被调用两次。

[myview removeFromSuperview]; 

这就是我的代码,所以我想知道如果调用'removeFromSuperview'会导致任何问题。

或者我该如何检查视图是否在超视图中,只有删除它。

e.g

if (myview in superview) 
    [myview removeFromSuperview]; 
else 
    do nothing 

回答

8

该文档为removeFromSuperview说的是以下几点:

如果接收方的上海华不为零时,上海华盈释放 接收器。如果您打算重新使用视图,请务必在调用此方法之前保留该视图,并在适当时候再次释放该视图。

这意味着不会发生崩溃或副作用,并且您询问的检查是否已通过此方法的实施执行。

但是,如果需要检查,如果你的看法被添加为子视图到其他视图中,可以使用下面的代码:

if(theView.superview != nil) 
{ 
    // theView is a subview for some view 
} 
+0

感谢完整解释 – Anand

+0

does removeFromSuperview make a subview = nil? –

0

试试这个:

if (myView.view.superview != nil) { 
    [myView removeFromSuperview]; 
} 
else { 
    //do something 
}