线程1:EXC_BAD_ACCESS(代码= 2,地址= 0xbf7ffffc)

时间:2012-02-29 15:50:49

标签: xcode4

使用一个根控制器和两个视图控制器(蓝色和黄色)编写一个简单的多视图应用程序。当我尝试在iPhone模拟器中运行它时,我得到@synthesize属性的错误。我已经注释掉了该行的错误。

您能告诉我错误的含义,以及如何让应用程序运行?

谢谢。

#import "SwitchViewController.h"
#import "BlueViewController.h"
#import "YellowViewController.h"

@interface SwitchViewController ()

@end

@implementation SwitchViewController
@synthesize yellowViewController;
@synthesize blueViewController; //Thread 1:EXC_BAD_ACCESS(code=2, address=0xbf7ffffc)

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)loadView
{
    // If you create your views manually, you MUST override this method and use it to create your views.
    // If you use Interface Builder to create your views, then you must NOT override this method.
}

- (void)viewDidLoad

{
    self.blueViewController = [[BlueViewController alloc]initWithNibName:@"BlueView" bundle:nil];
    [self.view insertSubview:self.blueViewController.view atIndex:0];
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
}

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

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

- (IBAction)switchViews:(id)sender
{
    if(self.yellowViewController.view.superview==nil) {
        if(self.yellowViewController==nil) {
            self.yellowViewController = 
            [[YellowViewController alloc] initWithNibName:@"YellowView" bundle:nil];
        }
        [blueViewController.view removeFromSuperview];
        [self.view insertSubview:self.yellowViewController.view atIndex:0];
    } else {
        if (self.blueViewController == nil) {
            self.blueViewController =
            [[BlueViewController alloc] initWithNibName:@"BlueView" bundle:nil];
        }
    }

}

- (void)didReceiveMemoryWarning 
{
    // Releases the view if it doesn't have a superview
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc. that aren't in use
    if (self.blueViewController.view.superview == nil) {
        self.blueViewController = nil;
    } else {
        self.yellowViewController = nil;
    }
}

@end

1 个答案:

答案 0 :(得分:1)

loadViewSwitchViewControllerBlueViewController中注释掉YellowViewController方法。空的应用程序模板已更改为在最新版本的XCode中保留未注释,但您所使用的Beginning iOS Development书籍使用的是旧版本,并且已预先注释了存根方法。