点击按钮导致侧栏上的应用程序崩溃
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];
我有两个视图控制器,一个是主页视图,一个是侧边菜单视图;所有对象并使用故事板创建。
主页视图上有一个条形按钮'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];