UISegmentedControl EXC_BAD_ACCESS

时间:2010-12-03 17:06:12

标签: iphone exc-bad-access uisegmentedcontrol

我遇到这种情况:

// 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 :(得分:0)

我假设您指定的(IBAction)aFunction在InterfaceBuilder中链接。 在“界面”构建器中设置时,您将设置为TouchUpInside。 而是选择Event作为ValueChanged。

将您的功能名称更改为

-(void)aFunction:(UISegmentedControl*)sender

并将接口构建器中的段控件与ValueChanged事件链接起来。不是TouchUpInside

答案 1 :(得分:0)

解决。也许我不知道如何使用Debugger Consolle,但我被卡住了,因为它告诉我崩溃发生在

self.sgmRassegna.selectedSegmentIndex = 0;

自此操作触发“Value Changed”事件以来,它会自动调用方法apriRassegnePrecedenti。这次它会跳过if,因此它不会为View Controller进行分配以及何时调用:

[vecchieRassegne release];

......热潮。