wait_fences: не удалось получить ответ: Ошибка 10004003 – UIAlert БЕЗ UITextField присутствует

Я работаю над приложением, когда UIAlert появляется в первый раз, когда пользователь начинает его использовать, чтобы спросить, хотят ли они использовать свое текущее местоположение. Это происходит в основном controllerе. Однако при использовании UIALert я получаю следующую ошибку:

wait_fences: failed to receive reply: 10004003 

Я отлаживал его и гугл. Я не использую текстовое поле или ввод с клавиатуры, поэтому мне не нужно уходить с первого ответчика. Тем не менее, я до сих пор не могу понять, почему я получаю эту ошибку. Он появляется только при добавлении UIAlert.

 MainController.m - (void)viewDidLoad { UIAlertView *mainAlert = [[UIAlertView alloc] initWithTitle:@"Location" message:@"Do you wish to use your current location?" delegate:self cancelButtonTitle:nil otherButtonTitles:@"No Thanks", @"Sure!", nil]; [mainAlert show]; [mainAlert release]; [super viewDidLoad]; } 

Заголовочный файл создается следующим образом:

 @interface MainController : UIViewController  

Причина этого wait_fences: failed to receive reply: также может быть, что вы пытаетесь показать предупреждение, не находясь на mainThread (который является streamом GUI).

Отправка в stream GUI помогает:

 dispatch_async(dispatch_get_main_queue(), ^{ [mainAlert show]; }); 

Я решил эту проблему, добавив небольшую задержку в UIAlert: ниже находится мой метод ViewDidLoad (он также отлично работает в ViewDidAppear ):

 [self performSelector:@selector(testAlert) withObject:nil afterDelay:0.1]; 

по какой-то причине эта задержка сделала трюк. Затем я вызвал другой метод (я его переименую, конечно ..):

 - (void) testAlert { UIAlertView *mainAlert = [[UIAlertView alloc] initWithTitle:@"Location" message:@"Do you wish to use your current location?" delegate:self cancelButtonTitle:nil otherButtonTitles:@"No Thanks", @"Sure!", nil]; [mainAlert show]; [mainAlert release]; } 

Всегда вызывайте [super viewDidLoad]; прежде чем делать что-либо еще. Это также объясняет, почему работает задержка.

Надеюсь, я прав. 🙂

Попробуйте показать UIAlert в -viewDidAppear: (BOOL) анимированный. -viewDidLoad вызывается, когда ваш просмотр загружен, но прежде, чем он появится на экране.

У меня была аналогичная проблема. Я добавлял наблюдателя в ViewDidLoad для уведомления о достижении, которое было опубликовано до того, как ViewDidAppear был закончен.

Поэтому ViewController пытался отобразить один UIAlertView до того, как его собственный View был полностью отрисован.

Я переместил добавление наблюдателей в ViewDidAppear и начал startNotifier достижимости в ViewDidAppear. Также был вызван вызов [super viewDidAppear] из кода. Оба эти исправления исправлены, приложение снова стало работать отлично.

Если вы получите это wait_fences: не удалось получить ответ: 10004003 ошибка один раз, возможно, вы не сможете представить какие-либо модальные ViewControllers в приложении. Это была проблема, которую я имел в своем приложении. Иногда при попытке представить один модальный ViewController приложение будет входить в бесконечный цикл.

Как сказал Алан, всегда помните: «Попробуйте показать UIAlert в анимации -viewDidAppear: (BOOL). -ViewDidLoad вызывается, когда ваш просмотр загружен, но до того, как он появится на экране».

Давайте будем гением компьютера.