I have MainMe开发者_如何学CnuViewController with button which action is
- (IBAction) goToFirstView { FirstViewController *fvc = [[FirstViewController alloc] init]; [self.view addSubview:fvc.view]; [fvc release]; }
FirstViewController have UIButton with action
- (IBAction) rightArrow { SecondViewController *svc = [[SecondViewController alloc] init]; [self.view addSubview:svc.view]; [svc release]; }
But when I press "rightArrow" button app crashes with "EXC_BAD_ACCESS". Can't found my problem. Help me please.
[svc release];
The problem is here. When releasing the view controller, the view's events will target a freed object, and make your program crash (probably in viewDidLoad or viewDidAppear if it's instant but it doesn't matter). Note that a view does not (normally, AFAIK) retain it's view controller, if that might have been your assumption...
When you say [self.view addSubview:svc.view]
you're adding SecondViewController's view to FirstViewController's view. Similar with MainViewController and FirstViewController. What you'll end up with is a view hierarchy that looks like this:
- main view
- first view
- second view
- first view
I doubt that's really what you want. Instead, use a navigation controller with your MainViewController as the nav controller's root controller, and then use -pushViewController:animated: to push the controllers (not the views!) onto the navigation stack.
精彩评论