アプリのUIAlertControllerで問題が発生しています。現在、日付ピッカーが内部にあるiOS8に移行しています。
以下はコードです。
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];
ユーザーがUITableViewControllerから行を選択すると、UIAlertControllerと日付ピッカーが表示されます。
問題は次のとおりです。ユーザーが最初に行を選択すると、すべてが正常に機能します...しかし、ユーザーが[キャンセル]を選択してからもう一度選択を選択すると、UIAlertControllerが表示されるまでに2〜3秒かかります...これは、シミュレータ...
頭がおかしくなってしまいます...これにより、アプリのユーザーエクスペリエンスが低下します。
どんな助けも強く感謝されます
アレックス
UITableViewから行を選択して表示されるUIAlertControllerで同じ問題が発生していました。初めてすべてが正常に機能し、ユーザーがアラートを再度トリガーしたとき、実際にアラートが表示されるまでに数秒の遅延がありました。
回避策として、GCDを使用しました。
_ dispatch_async(dispatch_get_main_queue(), ^{
[self presentViewController:AlertView animated:YES completion:nil];
});
_
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
はすでにメインスレッドで実行されているため、おそらくバグです。
Appleにバグレポートを提出しました: rdar:// 19285091
DispatchQueue.main.async {
self.present(alertView, animated: true, completion:nil)
}
Swift 3.0バージョン。または、animationed:falseを設定しても問題は解決しました。