我有UIViewController
UITableView
,当tableView为空时我想显示另一个视图,所以我使用此
[self.tableView setHidden:YES];
NoKidsViewController *noKids = [self.storyboard instantiateViewControllerWithIdentifier:@"NoKidsView"];
[self.view addSubview:noKids.view];
一切都很好,我能看到这个视图。但当我点击其中一个按钮时,我收到EXC_BAD_ACCESS EXC_I386_GPFLT
错误。
//NoKidsViewController
- (IBAction)addNewKid:(id)sender {
AddKid *addKidController = [self.storyboard instantiateViewControllerWithIdentifier:@"AddKid"];
[self.navigationController pushViewController:addKidController animated:YES];
}
- (IBAction)saleSpot:(id)sender {
SaleSpot *saleSpotController = [self.storyboard instantiateViewControllerWithIdentifier:@"AddKid"];
[self.navigationController pushViewController:saleSpotController animated:YES];
}
我在网上搜索了3个小时,试图找到没有成功的解决方案。什么可能导致错误?我该如何解决?
答案 0 :(得分:13)
noKids
控制器超出范围并被取消分配。这就是通常被称为僵尸对象的东西。
您需要将noKids
控制器添加到包含控制器的childViewControllers
。
NoKidsViewController *noKids = [self.storyboard instantiateViewControllerWithIdentifier:@"NoKidsView"];
[self addChildViewController:noKids];
[self.view addSubview:noKids.view];
[noKids didMoveToParentViewController:self];
这将保留NoKidsViewController
,并允许视图控制器方法向下传递给它。有关创建自定义容器视图控制器的更多信息: