本文介绍了轻触按钮导致应用程序在侧边栏上崩溃的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有两个视图控制器,一个是主视图,一个是侧边菜单视图;所有对象都是用情节提要创建的。

在主视图上有一个栏按钮‘Item’,当点击它时,它会调用一个自定义段,从左向右滑出侧边菜单。到目前为止一切顺利。

在侧边菜单上,有一个按钮可以滑回主视图。然而,我只需点击按钮,应用程序将终止,Xcode不会超时打印崩溃日志。

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

Xcode在

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

并说Thread 1: exc_bad_access(code=EXC_i386_GPFLT)

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

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;

    }];
}

推荐答案

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

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

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

这篇关于轻触按钮导致应用程序在侧边栏上崩溃的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

09-21 18:56