Я выполняю веб-запрос в фоновом режиме и хочу, чтобы пользователь мог отменить этот запрос. Я использую UIActionSheet с кнопкой «Отмена» во время работы веб-запроса. Когда веб-запрос возвращает ошибку, я закрываю UIActionSheet, вызывая DismissWithClickedButtonIndex (0, true). Затем я показываю UIAlertView с сообщением об ошибке и возможностью отменить или повторить веб-запрос.
В большинстве случаев все работает нормально, но иногда я получаю сообщение "wait_fences: не удалось получить ответ: 10004003" в окне вывода консоли, и, случайно, возникает какое-то странное поведение пользовательского интерфейса.
Я провел некоторый поиск и обнаружил, что это вызвано чем-то вроде лежащего в основе представления, которое не может получить управление до того, как оно будет передано в UIAlertView. Некоторые люди предлагали отложить показ AlertView с помощью PerformSelector. Это правильное решение? Если это так, как я могу передать метод Show UIAlertView первому параметру метода PerformSelector?
В настоящее время я использую это решение для задержки:
private void StartAfterParentViewUpdate(NSAction action)
{
NSAction delayedAction = () => BeginInvokeOnMainThread(action);
NSTimer.CreateScheduledTimer(new TimeSpan(0, 0, 0, 0, 200), delayedAction);
}
Таким образом, я могу вызвать StartAfterParentViewUpdate (_alertView.Show), и я предполагаю, что он будет работать в основном потоке пользовательского интерфейса, как только поток сможет его обработать. Это правильно или есть лучший способ решить эту проблему?