代码之家  ›  专栏  ›  技术社区  ›  Duck

IPHONE:测试视图是否在superview上

  •  3
  • Duck  · 技术社区  · 16 年前

    我要做一个

    [vistaX removeFromSuperview];
    

    如何在删除超级视图之前测试它是否存在vistaX?删除不存在的视图会导致应用程序崩溃。..

    2 回复  |  直到 16 年前
        1
  •  14
  •   Chris Karcher    16 年前

    你可以用以下方法来保护它:

    if(vistaX.superview)
         [vistaX removeFromSuperview];
    

    虽然,我不知道如果没有superview,removeFromSuperview会失败。您确定这就是问题所在,并且可能与removeFromSuperview释放视图的事实无关吗?

    编辑 : 根据您在下面的评论,听起来vistaX的保留计数第一次将变为0,并且正在被释放。如果你不想发生这种情况,请在你的类中添加一个保留vistaX的属性(即“@property(retain)”),这样你就可以确保它始终存在。

    编辑编辑 : 您对superView或其祖先之一有控制权吗?如果是这样,我建议设置一个独特的 tag 在vistaX视图上。这可以通过编程或IB完成。然后,使用 viewWithTag

        2
  •  2
  •   Sanoj Kashyap    13 年前

    你可以通过应用一个条件来检查它,比如

    if(vistaX.superview!=nil)
       [vistaX removeFromSuperview];
    

    然后,如果superview存在,它将从superview中删除,否则不会。