2010-12-03 13 views
0

Ich habe diese 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]; 
} 

Die IBOutlet richtig verbunden ist, kann ich nicht verstehen, warum es den Fehler gibt. Einige Hinweise?

EDIT: Ich habe ssame Operationen in einer anderen App gemacht und es funktioniert perfekt; Ich kann immer noch nicht herausfinden, was den Absturz verursacht hat. Ich werde die komplette Funktion veröffentlichen. Wie in der Antwort erwähnt, wird das Ereignis auf "Wert geändert" behandelt. Diese ist die Testfunktion, die funktioniert:

- (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

Sie haben einen Stack-Trace oder andere Ausgabe von der Konsole? –

+1

CONSOLE Programm empfangenes Signal: "EXC_BAD_ACCESS". – IssamTP

+0

STACK Trace 0x003a56b2 <+0574> mov 0x47b1f2 (% ebx)% EDX – IssamTP

Antwort

0

Gelöst. Vielleicht habe ich nicht, wie man den Debugger Consolle zu verwenden, aber ich stecken geblieben war, weil es mir erzählte, dass der Absturz auf vorging

self.sgmRassegna.selectedSegmentIndex = 0; 

Seit dem Moment, dass dieser Vorgang ein feuert Ereignis „Wert geändert“, ruft sie automatisch die Methode apriRassegnePrecedenti. Dieses Mal ist es die überspringt, wenn so dass es nicht die alloc für den View-Controller machen und wenn es nennt:

[vecchieRassegne release]; 

... Boom.

0

Ich gehe davon aus, die (IBAction) aFunction, die Sie im Interface verknüpft angegeben ist. Wenn Sie im Interface-Builder festgelegt haben, würden Sie auf TouchUpInside festgelegt haben. Wählen Sie stattdessen das Ereignis als ValueChanged.

Funktion Ändern Sie Namen als

-(void)aFunction:(UISegmentedControl*)sender 

und verknüpfen Sie Ihre Segmentsteuerung im Interface Builder mit der Veranstaltung Value. Nicht als TouchUpInside

+0

Der Auslass korrekt auf Value reagiert. – IssamTP

+0

Was ist der Absturzbericht von der Konsole – iPrabu

+0

Programm empfangenen Signal: "EXC_BAD_ACCESS". – IssamTP