2010-12-03 25 views
0

J'ai cette situation:UISegmentedControl EXC_BAD_ACCESS

// 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]; 
} 

Le IBOutlet est correctement lié, je ne peux pas comprendre pourquoi il donne l'erreur. Quelques conseils?

EDIT: J'ai effectué les mêmes opérations dans une autre application et cela fonctionne parfaitement; Je ne peux toujours pas comprendre ce qui cause le crash. Je posterai la fonction complète. Comme indiqué dans la réponse, l'événement est géré sur "Valeur modifiée". Ce est la fonction de test qui fonctionne:

- (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]; 
} 
+0

Vous avez une trace de pile ou une autre sortie de la console? –

+1

CONSOLE Signal reçu par le programme: "EXC_BAD_ACCESS". – IssamTP

+0

Trace STACK 0x003a56b2 <+0574> mov 0x47b1f2 (% EBX),% edx – IssamTP

Répondre

0

Résolu. Peut-être que je ne suis pas comment utiliser le Débogueur Consolle, mais je suis coincé parce qu'il me disait que l'accident se produisait sur

self.sgmRassegna.selectedSegmentIndex = 0; 

Depuis le moment que cette opération déclenche un événement « Value Changed », il appelle automatiquement la méthode apriRassegnePrecedenti. Cette fois, il ignore le cas échéant, il ne fait pas l'alloc pour le contrôleur de vue et quand il appelle:

[vecchieRassegne release]; 

... boom.

0

Je suppose que le (IBAction) AFunction que vous avez spécifiée est lié dans le InterfaceBuilder. Lorsque vous avez défini le constructeur d'interface, vous l'avez défini sur TouchUpInside. Sélectionnez à la place l'événement en tant que ValueChanged.

Modifier vous fonctionnez nom

-(void)aFunction:(UISegmentedControl*)sender 

et votre lien de contrôle du segment dans le générateur d'interface avec l'événement comme ValueChanged. Pas comme TouchUpInside

+0

La sortie sur ValueChanged répond correctement. – IssamTP

+0

Whats the Crash Report à partir de la console – iPrabu

+0

Signal reçu du programme: "EXC_BAD_ACCESS". – IssamTP