Подтвердить что ты не робот

Отображение UIAlertController с задержкой

У меня возникла проблема с UIAlertController в моем приложении, которое теперь перенесено на iOS8 с помощью Date Picker внутри.

Ниже приведен код.

UIAlertController *AlertView = [UIAlertController alertControllerWithTitle:title message:nil preferredStyle:UIAlertControllerStyleActionSheet];

 UIAlertAction *ok = [UIAlertAction actionWithTitle:@"Ok" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action)
{
[AlertView dismissViewControllerAnimated:YES completion:nil];
}];

 UIAlertAction *set = [UIAlertAction actionWithTitle:NSLocalizedString(@"Set to today", nil) style:UIAlertActionStyleDefault handler:^(UIAlertAction *action)
{
[self set_to_today:nil];
[AlertView dismissViewControllerAnimated:YES completion:nil];
[self.tableView reloadData];
}];

 UIAlertAction *cancel = [UIAlertAction actionWithTitle:@"Cancel" style:UIAlertActionStyleDefault handler:^(UIAlertAction *action)
{
[AlertView dismissViewControllerAnimated:YES completion:nil];
}];


 UIDatePicker *datePicker = [[[UIDatePicker alloc] init] autorelease];
 datePicker.datePickerMode = UIDatePickerModeDate;
[datePicker setDate:data_appo];
[datePicker addTarget:self action:@selector(datePickerValueChanged:) forControlEvents:UIControlEventValueChanged];

[AlertView.view addSubview:datePicker];
[AlertView addAction:ok];
[AlertView addAction:set];
[AlertView addAction:cancel];
[self.view bringSubviewToFront:datePicker];
[self presentViewController:AlertView animated:YES completion:nil];

UIAlertController и Date Picker отображаются, когда пользователь выбирает строку из UITableViewController.

Проблема заключается в следующем: в первый раз, когда пользователи выбирают строку, все работает нормально... но если пользователь выбирает "Отмена", а затем снова выбирает значение, UIAlertController занимает 2-3 секунды, чтобы отобразиться... это происходит и в симуляторе...

Я с ума сошел... это заставляет мое приложение плохо работать с пользователем.

Любая помощь будет высоко оценена Благодаря

Алекс

4b9b3361

Ответ 1

У меня была та же проблема с UIAlertController, представленной выбором строки из UITableView. В первый раз все сработало нормально, а затем, когда пользователь снова вызвал предупреждение, была задержка на несколько секунд, прежде чем было представлено предупреждение.

В качестве обходного пути я использовал GCD:

    dispatch_async(dispatch_get_main_queue(), ^{
        [self presentViewController:AlertView animated:YES completion:nil];
    });

Вероятно, это ошибка, так как -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath уже выполняется в основном потоке.

Я отправил отчет Apple об ошибке: rdar://19285091

Ответ 2

    DispatchQueue.main.async {
        self.present(alertView, animated: true, completion:nil)
    }

версия Swift 3.0. Альтернативно, установка анимированного: false также решила мою проблему.