单击按钮时EXC_BAD_ACCESS EXC_I386_GPFLT

Osh*_*ALM 3 exc-bad-access objective-c uiviewcontroller

我有一个UIViewControllerUITableView当的tableView是空的,我想展现另一种看法,所以我用这个

    [self.tableView setHidden:YES];
    NoKidsViewController *noKids = [self.storyboard instantiateViewControllerWithIdentifier:@"NoKidsView"];

    [self.view addSubview:noKids.view];
Run Code Online (Sandbox Code Playgroud)

一切都很好,我能看到这个观点.但当我点击其中一个按钮时,我收到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];
    }
Run Code Online (Sandbox Code Playgroud)

我在网上搜索了3个多小时,试图找到没有成功的解决方案.什么可能导致错误?我该如何解决?

Fru*_*eek 13

noKids控制器是走出去的范围和被释放.这就是通常被称为僵尸对象的东西.

您需要将noKids控制器添加到childViewControllers包含控制器的控制器中.

NoKidsViewController *noKids = [self.storyboard instantiateViewControllerWithIdentifier:@"NoKidsView"];
[self addChildViewController:noKids];
[self.view addSubview:noKids.view];
[noKids didMoveToParentViewController:self];
Run Code Online (Sandbox Code Playgroud)

这将保留NoKidsViewController以及允许视图控制器方法向下传递给它.有关创建自定义容器视图控制器的更多信息:

https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html