Поток 1: EXC_BAD_ACCESS (код = 2, адрес = 0xbf7ffffc) - PullRequest
0 голосов
/ 29 февраля 2012

Пишу простое приложение с несколькими представлениями с одним корневым контроллером и двумя контроллерами представления (синий и желтый). Когда я пытаюсь запустить его в iPhone Simulator, я получаю сообщение об ошибке через свойство @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 Ответ

1 голос
/ 07 марта 2012

Закомментируйте метод loadView в ваших SwitchViewController, BlueViewController и YellowViewController.Пустой шаблон приложения был изменен, чтобы оставить его без комментариев в последних версиях XCode, но в книге Beginning iOS Development, которую вы читаете, использовалась более старая версия с предварительно прокомментированными методами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...