点击按钮导致侧栏上的应用程序崩溃

tap button cause app crash on side bar

我有两个视图控制器,一个是主页视图,一个是侧边菜单视图;所有对象并使用故事板创建。

主页视图上有一个条形按钮'item',点击它会调用自定义segue,从左到右滑出侧边菜单。到目前为止一切顺利。

在侧面菜单中,有一个按钮可以滑回主视图。但是,我只是简单地点击按钮,应用程序将终止,Xcode 不会超时打印出崩溃日志。

我试图在 (IBAction)SlideBack:(id)sender 上添加一个断点,似乎它没有被调用。所以发生了一系列的事情。

Xcode 在

处中断
return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));

Thread 1: exc_bad_access(code=EXC_i386_GPFLT)

我怀疑自定义 segue 可能会干扰视图和视图控制器层次结构。但是查不到。

home view implementation:
@implementation HomeViewController
@end

side bar implementation:

@implementation SideBarController
- (IBAction)SlideBack:(id)sender {
    NSLog(@"sliding back");
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


The custom slide out segue is:
@implementation CustomSegue

- (void)perform {
    UIViewController *contentVC = self.sourceViewController;
    UIViewController *sideBarVC = self.destinationViewController;
    CGRect sideFrame = sideBarVC.view.frame;
    [sideBarVC.view setFrame: CGRectMake(-(contentVC.view.frame.size.width),
                                         0,
                                         contentVC.view.frame.size.width/2,
                                         contentVC.view.frame.size.height)];
    CGRect animationFrame = contentVC.view.frame;
    sideFrame = sideBarVC.view.frame;
    animationFrame.size.width = contentVC.view.frame.size.width / 2;
    sideBarVC.view.alpha = 0;
    [[[contentVC.view superview] window] addSubview:sideBarVC.view];
    [UIView animateWithDuration:1
                          delay:0.0
                        options:UIViewAnimationOptionCurveEaseOut
                     animations:^{
        sideBarVC.view.frame = animationFrame;
        sideBarVC.view.alpha = 1;
    }
                     completion:^(BOOL finished) {
        sideBarVC.view.alpha = 1;
        sideBarVC.view.frame = animationFrame;

    }];
}

寻求帮助后,我发现我误解了segue逻辑。 [[[contentVC.view superview] window] addSubview:sideBarVC.view]; 不够。

相反,下面的代码应该是正确的:

[contentVC addChildViewController:sideBarVC];
[[[contentVC.view superview] window] addSubview:sideBarVC.view]
[sideBarVC didMoveToParentViewController:contengVC];