ActionSheet в NavController с помощью TabBarController - Exc_Bad_Access - PullRequest
0 голосов
/ 23 июля 2011

У меня сейчас странная проблема.У меня есть лист действий с pickerView с двумя кнопками (отмена и ОК).Они отлично работают, пока я не выберу значение в этом средстве выбора и не нажму первую кнопку моего TabBarController, который содержит мой NavigationController.

Моя таблица действий объявлена ​​в моем .h и имеет свойство (nonatomic, retain), яотпустите его в моей функции dealloc.

У меня есть exc_bad_access, если я освобождаю этот объект, и я не знаю почему, потому что я его выделил.

Это моя функция, которая создает мой Actionsheet, если nil,и создайте его.

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

Спасибо

1 Ответ

0 голосов
/ 23 июля 2011

Если у вас есть свойство 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)

...