我有一个 UIViewController
和 UITableView
,当 tableView 为空时我想显示另一个 View ,所以我正在使用它
[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 个多小时,试图找到任何没有成功的解决方案。什么可能导致该错误?我该如何解决?
最佳答案
noKids
Controller 超出范围并被释放。这就是通常所说的僵尸对象。
您需要将 noKids
Controller 添加到包含 Controller 的 childViewControllers
。
NoKidsViewController *noKids = [self.storyboard instantiateViewControllerWithIdentifier:@"NoKidsView"];
[self addChildViewController:noKids];
[self.view addSubview:noKids.view];
[noKids didMoveToParentViewController:self];
这将保留 NoKidsViewController
并允许 View Controller 方法传递给它。有关创建自定义容器 View Controller 的更多信息:
关于objective-c - EXC_BAD_ACCESS EXC_I386_GPFLT 同时点击按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25268744/