以编程方式创建的视图崩溃

时间:2012-05-15 17:13:18

标签: ios ios5

患者:两个控制器--ViewController和(模态呈现)RecorderViewController 症状:在RecorderViewController以模态方式呈现之后,它可以完成一些工作。被解雇后,程序崩溃了EXC_BAD_ACCESS

在AppDelegate.m中:

@synthesize window = _window;
@synthesize controller = _controller;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:    (NSDictionary *)launchOptions
{
    // Override point for customization after application launch.
    self.controller = [ViewController alloc];

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
    self.window.rootViewController = self.controller;
    [self.window makeKeyAndVisible];

    return YES;
}

在ViewController.m中

#import "ViewController.h"
#import "RecorderViewController.h"

@interface ViewController ()

@end

@implementation ViewController

@synthesize presentModalButton;

- (void)loadView 
{
    self.view = [[UIView alloc] initWithFrame:[UIScreen mainScreen].applicationFrame];

    self.presentModalButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    self.presentModalButton.frame = CGRectMake(0, self.view.frame.size.height/2, 100, 50);
    [self.presentModalButton addTarget:self action:@selector(goToRecorderButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

    [self.view addSubview:self.presentModalButton];

}

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

- (IBAction)goToRecorderButtonPressed:(id)sender {
    RecorderViewController *recorderVC = [RecorderViewController alloc];
    [self presentModalViewController:recorderVC animated:YES];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    self.presentModalButton = nil;
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
}

@end

在返回UIApplicationMain时在main.m中崩溃:     #import

#import "AppDelegate.h"

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

1 个答案:

答案 0 :(得分:0)

我认为goToRecorderButtonPressed方法存在问题。

看,您正在为recorderVC分配内存但不启动它。您应该使用可用方法初始化对象,例如init

- (IBAction)goToRecorderButtonPressed:(id)sender {
    RecorderViewController *recorderVC = [[RecorderViewController alloc] init];
    [self presentModalViewController:recorderVC animated:YES];
}