UISegmentedControl EXC_BAD_ACCESS - PullRequest
       4

UISegmentedControl EXC_BAD_ACCESS

0 голосов
/ 03 декабря 2010

У меня такая ситуация:

// CustViewController.h

...
IBOutlet UISegmentedControl *sgmController;
...

@property (nonatomic, retain) IBOutlet UISegmentedControl *sgmController;

// CustViewController.m

@synthesize sgmController;

- (IBAction)apriRassegnePrecedenti {
NSString *model;
NSString *nibToLoad;
UIBarButtonItem *backBarButtonItem;
VecchieRassegneViewController *vecchieRassegne;

if ( self.sgmRassegna.selectedSegmentIndex == 1 ) {
    backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Rass. odierne" style:UIBarButtonItemStylePlain target:self action:nil];
    model = [NSString stringWithString:[[UIDevice currentDevice] model]];
    if ( [model isEqualToString:@"iPhone"] || [model isEqualToString:@"iPhoneSimulator"] ) {
        nibToLoad = [NSString stringWithString:@"VecchieRassegneViewController"];
    } else {
        nibToLoad = [NSString stringWithString:@"VecchieRassegneViewControllerPAD"];
    }
    vecchieRassegne = [[VecchieRassegneViewController alloc] initWithNibName:nibToLoad bundle:nil];
    self.sgmRassegna.selectedSegmentIndex = 0; // The Crash comes here.
    [self.navigationController pushViewController:vecchieRassegne animated:YES];
}

[backBarButtonItem release];
[vecchieRassegne release];
}

IBOutlet правильно связан, я не могу понять, почему он дает ошибкуНекоторые советы?

РЕДАКТИРОВАТЬ: я сделал ssame операции в другом приложении, и он работает отлично;Я до сих пор не могу понять, что является причиной аварии.Я выложу полную функцию.Как сказано в ответе, событие обрабатывается на «Значение изменено».Это тестовая функция, которая работает:

- (IBAction)pushDiTest {
ASecondView *secondView;

secondView = [[ASecondView alloc] initWithNibName:@"ASecondView" bundle:nil];
if ( self.sgmTest.selectedSegmentIndex == 1 ) {
    self.sgmTest.selectedSegmentIndex = 0;
    [self.navigationController pushViewController:secondView animated:YES];
}

[secondView release];
}

Ответы [ 2 ]

0 голосов
/ 06 декабря 2010

решаемая.Возможно, я не знаю, как использовать Debugger Consolle, но я застрял, потому что он говорил мне, что сбой происходил на

self.sgmRassegna.selectedSegmentIndex = 0;

С того момента, как эта операция запускает событие «Value Changed», оноавтоматически вызывает метод apriRassegnePrecedenti.На этот раз он пропускает if, поэтому не выполняет выделение для View Controller и при вызове:

[vecchieRassegne release];

... boom.

0 голосов
/ 03 декабря 2010

Я предполагаю, что указанная вами функция (IBAction) связана в InterfaceBuilder. Когда вы устанавливаете в Интерфейсном Разработчике, вы бы установили TouchUpInside. Вместо этого выберите событие как ValueChanged.

Измените название вашей функции на

-(void)aFunction:(UISegmentedControl*)sender

и свяжите свой сегмент управления в конструкторе интерфейса с событием как ValueChanged. Не так, как TouchUpInside

...