Хорошо, я пытаюсь использовать простой UINavigationController с iPhone SDK в XCode, и он хорошо работает при нажатии, но если пройти 2 нажатия и попытаться открыть контроллеры представления, я получаю сообщение об ошибке: EXC_BAD_ACCESS
Я знаю, что это значит, но как, черт возьми, я могу это исправить?
Вот мой код ... (Предположим, что MainViewController имеет кнопку, которая вызывает функцию showStartMenu)
FurballAppDelegate.h
//
// FurballAppDelegate.h
// Furball
//
// Created by Morgan Family on 7/28/10.
// Copyright __MyCompanyName__ 2010. All rights reserved.
//
#import <UIKit/UIKit.h>
@class MainViewController, StartViewController, SubjectViewController;
@interface FurballAppDelegate : NSObject <UIApplicationDelegate> {
UIWindow *window;
UINavigationController *navController;
MainViewController *mainController;
StartViewController *startController;
}
@property (nonatomic, retain) UIWindow *window;
@property (nonatomic, retain) UINavigationController *navController;
@property (nonatomic, retain) MainViewController *mainController;
@property (nonatomic, retain) StartViewController *startController;
- (void)popBack;
- (void)pushNext:(UIViewController *)next;
- (void)showStartMenu;
@end
FurballAppDelegate.m
//
// FurballAppDelegate.m
// Furball
//
// Created by Morgan Family on 7/28/10.
// Copyright __MyCompanyName__ 2010. All rights reserved.
//
#import "FurballAppDelegate.h"
#import "MainViewController.h"
#import "StartViewController.h"
#import "SubjectViewController.h"
@implementation FurballAppDelegate
@synthesize window;
@synthesize navController;
@synthesize mainController;
@synthesize startController;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
mainController = [[MainViewController alloc] init];
navController = [[UINavigationController alloc] initWithRootViewController:mainController];
[window addSubview:navController.view];
[window makeKeyAndVisible];
}
- (void)dealloc {
[mainController release];
[startController release];
[subjectController release];
[window release];
[super dealloc];
}
- (void)popBack {
[navController popViewControllerAnimated:YES];
}
- (void)pushNext:(UIViewController *)next {
[navController pushViewController:next animated:YES];
}
- (void)showStartMenu {
startController = [[StartViewController alloc] init];
[self pushNext:startController];
}
@end
StartViewController.h
//
// StartViewController.h
// Furball
//
// Created by Morgan Family on 8/4/10.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import
@interface StartViewController : UIViewController {
}
- (void)showSubjectMenu;
@end
StartViewController.m
//
// StartViewController.m
// Furball
//
// Created by Morgan Family on 8/4/10.
// Copyright 2010 __MyCompanyName__. All rights reserved.
//
#import "FurballAppDelegate.h"
#import "StartViewController.h"
#import "SubjectViewController.h"
@implementation StartViewController
- (void)loadView {
UIView *view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];
UIButton *btn = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btn setFrame:CGRectMake(50, 50, 100, 30)];
[btn setTitle:@"DO WORK" forState:UIControlStateNormal];
[btn addTarget:self action:@selector(chooseSubject) forControlEvents:UIControlEventTouchUpInside];
[view addSubview:btn];
FurballAppDelegate *app = [[UIApplication sharedApplication] delegate];
UIButton *btnBack = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[btnBack setFrame:CGRectMake(50, 100, 100, 30)];
[btnBack setTitle:@"DO WORK" forState:UIControlStateNormal];
[btnBack addTarget:app action:@selector(popBack) forControlEvents:UIControlEventTouchUpInside];
[view addSubview:btnBack];
self.view = view;
[view release];
}
- (void)viewDidLoad {
[super viewDidLoad];
}
- (void)chooseSubject {
FurballAppDelegate *app = [[UIApplication sharedApplication] delegate];
SubjectViewController *subjectController = [[SubjectViewController alloc] init];
[app pushNext:subjectController];
}
- (void)dealloc {
[super dealloc];
}
@end
Все нажатия на все мои файлы работают. Даже «btnBack», когда я касаюсь его, возвращает контроллер навигации обратно в MainViewController ... но когда я делаю кнопку возврата, идентичную той, что в StartViewController, в SubjectViewController он выдает мне эту странную ошибку.
Я очень ценю любую помощь:)