我正在努力追求一个非常棘手的问题。在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
并再次发现问题。
我在这里做的是否有任何明显或非明显的错误,我不应该这样做?此代码段的想法是暂时显示其他一些视图,而数据不可用。
答案 0 :(得分:2)
我不知道这是否能解决您的问题,但是:
[super viewDidApper:animated]
应位于viewDidAppear方法viewWillAppear
也许这有点帮助。
答案 1 :(得分:1)
将此作为答案而不是评论提交
'如果错误情况发生了两次会发生什么?,当你离开视图时,是否从超级视图中删除了视图?如果你的导航控制器没有解除你的viewController,我认为它可能会保留已添加的子视图?首先想到的是那个突然出现在我脑海中的
问题是您的子视图被多次添加,并被删除一次。因此,当您预期将其删除时,它只会移除顶部。
我建议将视图作为实例变量,这样每次添加和删除子视图时,它都指向同一个视图。
答案 2 :(得分:1)
if (!self.noDataView)
{
[[NSBundle mainBundle] loadNibNamed:@"NoDataView" owner:self options:nil];
}