Сбой UIActionSheet после повторного появления на iPad - PullRequest
0 голосов
/ 02 июля 2011

UIActionSheet аварийно завершает работу после повторного появления через ..

.H файл

..UIActionSheetDelegate>{

 UIActionSheet *popupQuery;
}
@property (nonatomic, retain) UIActionSheet *popupQuery;

.M файл

-(IBAction)showActionSheet:(id)sender {

if (popupQuery.visible) {
    NSLog(@"popupQuery isVisible");

    [popupQuery dismissWithClickedButtonIndex:-1 animated:YES];

    return;
}else{


popupQuery = [[UIActionSheet alloc] initWithTitle:@"Title" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Readibility" otherButtonTitles:@"Email URL", @"Print", nil];
popupQuery.actionSheetStyle = UIActionSheetStyleBlackOpaque;
//[popupQuery showInView:self.view];


[popupQuery showFromBarButtonItem:actionButton animated:YES];

[popupQuery release];
}
  }

Ответы [ 2 ]

2 голосов
/ 02 июля 2011

Когда вы отпускаете popupQuery после показа его из actionButton, вы отказываетесь от владения объектом. Если объект освобождается, то popupQuery будет указывать на освобожденный объект, который при выполнении popupQuery.visible может вызвать сбой. Поскольку у вас есть это свойство, вы можете сделать это -

self.popupQuery = [[[UIActionSheet alloc] initWithTitle:@"Title" delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:@"Readibility" otherButtonTitles:@"Email URL", @"Print", nil] autorelease];

Удалить оператор release в конце. Теперь объект будет действителен, когда вы popupQuery.visible или self.poupQuery.visible. В этом случае у вас будет право собственности и вы сможете безопасно получить доступ к объекту.

1 голос
/ 02 июля 2011

Из документации для UIActionSheet:

- (void)dismissWithClickedButtonIndex:(NSInteger)buttonIndex animated:(BOOL)animated

Параметры

buttonIndex

Индекс нажатой кнопки.Индексы кнопок начинаются с 0.

Поэтому проблема может быть в вашем -1.

...