NavController中的ActionSheet与TabBarController - Exc_Bad_Access

时间:2011-07-23 09:37:04

标签: objective-c uipickerview exc-bad-access uiactionsheet

我目前有一个奇怪的问题。 我有一个带有pickerView的动作表,带有两个按钮(取消,然后确定)。 它们完美地工作,直到我在选择器中选择一个值,然后单击我的TabBarController的第一个按钮,它包含我的NavigationController。

我的动作表在我的.h中声明并且具有属性(非原子,保留),我在我的dealloc函数中释放它。

如果我发布这个对象,我有一个exc_bad_access,我不知道为什么因为我分配了它。

这是我的函数,如果是nil则创建我的Actionsheet并构建它。

- (IBAction)select_marque :(id)sender
{
    if (!actionSheet_marque)
    {
        actionSheet_marque = [[UIActionSheet alloc] initWithTitle:nil delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil];
    }
    [actionSheet_marque setActionSheetStyle:UIActionSheetStyleBlackTranslucent];

    CGRect pickerFrame = CGRectMake(0, 40, 0, 0);


    picker_marque = [[UIPickerView alloc] initWithFrame: pickerFrame];
    picker_marque.showsSelectionIndicator = YES;
    picker_marque.dataSource = self;
    picker_marque.delegate = self;

    [actionSheet_marque addSubview: picker_marque];

    [picker_marque release];

    UILabel *lbl = [[UILabel alloc] initWithFrame: CGRectMake(110, 7.0f, 150.0f, 30.0f)];
    lbl.text = @"Marque";
    lbl.backgroundColor = [UIColor clearColor];
    lbl.textColor = [UIColor whiteColor]; 

    [actionSheet_marque addSubview:lbl];

    [lbl release];    

    UISegmentedControl *closeButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Ok"]];
    closeButton.momentary = YES; 
    closeButton.frame = CGRectMake(260, 7.0f, 50.0f, 30.0f);
    closeButton.segmentedControlStyle = UISegmentedControlStyleBar;
    closeButton.tintColor = [UIColor blueColor];
    [closeButton addTarget:self action:@selector(dismissActionSheet:) forControlEvents:UIControlEventValueChanged];

    [actionSheet_marque addSubview:closeButton];

    [closeButton release];

    UISegmentedControl *cancelButton = [[UISegmentedControl alloc] initWithItems:[NSArray arrayWithObject:@"Cancel"]];
    cancelButton.momentary = YES; 
    cancelButton.frame = CGRectMake(5, 7.0f, 50.0f, 30.0f);
    cancelButton.segmentedControlStyle = UISegmentedControlStyleBar;
    cancelButton.tintColor = [UIColor redColor];
    cancelButton.tag = 1;
    [cancelButton addTarget:self action:@selector(cancelActionSheet:) forControlEvents:UIControlEventValueChanged];

    [actionSheet_marque addSubview:cancelButton];

    [cancelButton release];

    [actionSheet_marque showInView: self.navigationController.view];

    [actionSheet_marque setBounds:CGRectMake(0, 0, 320, 485)];
}

我还检查dealloc方法中的指针是否为n。

由于

1 个答案:

答案 0 :(得分:0)

如果您拥有UIActionsheet的属性,则在分配时应使用self.actionSheet_marque。尝试更改这样的代码

if (!actionSheet_marque)
    {
        self.actionSheet_marque = [[[UIActionSheet alloc] initWithTitle:nil delegate:nil cancelButtonTitle:nil destructiveButtonTitle:nil otherButtonTitles:nil] autorelease];
    }


    [self.actionSheet_marque setActionSheetStyle:UIActionSheetStyleBlackTranslucent];

除了这行(!actionSheet_marque)

之外的整个函数