视图有时没有消失

时间:2010-08-11 14:09:05

标签: iphone

我正在努力追求一个非常棘手的问题。在viewDidAppear:我有以下代码:

if(dataSourceCount > 0)
{
    [scrollView setHidden:NO];
    UIView *ndView = [self.view viewWithTag:204];
    [ndView removeFromSuperview];
    self.noDataView = nil;
    infoBtn.hidden = NO;
}
else
{
    [scrollView setHidden:YES];
    [[NSBundle mainBundle] loadNibNamed:@"NoDataView" owner:self options:nil];
    self.noDataView.tag = 204;
    [self.view addSubview:self.noDataView];
    infoBtn.hidden = YES;
}
[super viewDidAppear:animated];

问题出现在if true的情况下,非常罕见,因此在设备上我可以看到已从超级视图中删除的视图 - ndView

我当时认为viewWithTag有时会返回nil,但事实并非如我在调试中发现的那样。还尝试将self.noDataView = nil移至else并再次发现问题。

我在这里做的是否有任何明显或非明显的错误,我不应该这样做?此代码段的想法是暂时显示其他一些视图,而数据不可用。

3 个答案:

答案 0 :(得分:2)

我不知道这是否能解决您的问题,但是:

  1. [super viewDidApper:animated]应位于viewDidAppear方法
  2. 中的第一行
  3. 我会将您的代码移至viewWillAppear
  4. 也许这有点帮助。

答案 1 :(得分:1)

将此作为答案而不是评论提交

'如果错误情况发生了两次会发生什么?,当你离开视图时,是否从超级视图中删除了视图?如果你的导航控制器没有解除你的viewController,我认为它可能会保留已添加的子视图?首先想到的是那个突然出现在我脑海中的

问题是您的子视图被多次添加,并被删除一次。因此,当您预期将其删除时,它只会移除顶部。

我建议将视图作为实例变量,这样每次添加和删除子视图时,它都指向同一个视图。

答案 2 :(得分:1)

if (!self.noDataView)
{
  [[NSBundle mainBundle] loadNibNamed:@"NoDataView" owner:self options:nil];
}