Msgstr “wait_fences: не удалось получить ответ: 10004003”?

Я получаю эту загадочную ошибку в первый раз (и только в первый раз) мое представление загружается из-за следующей строки кода:

- (void)viewWillAppear:(BOOL)animated { [textField becomeFirstResponder]; } 

Из-за этого наблюдается заметная (~ 3 – 4 секунды, даже на симуляторе) задержка, которая заставляет мое приложение чувствовать себя невосприимчивым. Кто-нибудь знает, как это исправить? Я не могу найти документацию на нем на сайте Apple или любые решения здесь или в Google.

Как ни странно, происходит противоположная ситуация, если я помещаю строку в -viewDidAppear: вместо -viewWillAppear: то есть вместо того, чтобы печатать ошибку только в первый раз, когда клавиатура отображается и никогда больше, ошибка не печатается в первый раз, но каждый раз после. Это вызывает серьезную головную боль для меня.

Переопределите -viewDidAppear: не -viewWillAppear , и обязательно вызовите [super viewDidAppear:] . Вы не должны выполнять анимацию, когда вы не находитесь на экране («появится»). И -viewDidAppear: docs объясняют, что вы должны назвать super потому что у них есть свои дела.

Я получал аналогичную ошибку, когда быстро:

  1. Отклонение модального вида
  2. Обновление основного вида
  3. Представление нового модального представления

Я заметил, что я только получил его в симуляторе, а не на устройстве. Кроме того, я попадал в бесконечный цикл.

Мое решение состояло в том, чтобы отложить представление нового модального представления. Похоже, что быстрое обновление иерархии представлений вызвало некоторое несоответствие состояния гонки в коде Apple.

Имея это в виду, попробуйте следующее:

  - (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [textField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:0.1]; } 

У вас могут возникнуть проблемы с клавиатурой для UITextField, который еще не отображается на экране. Это может вызвать проблемы, похожие на мои.

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

Надеюсь это поможет.

Убедитесь, что вы только взаимодействуете с пользовательским интерфейсом на основном streamе. Я получил wait_fences: failed to receive reply: 10004003 пока я сидел там, ожидая, пока UIAlertView покажет около 5 секунд, потому что соответствующий код был выполнен в фоновом streamе. Вы можете убедиться, поставив свой код в блок и отправив его в основной stream:

 dispatch_async(dispatch_get_main_queue(), ^{ if (!success) { // Inform user that import failed UIAlertView * importFailedAlert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"ErrorTitle5", @"Import failed") message:NSLocalizedString(@"Error5", @"Something went wrong") delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", nil) otherButtonTitles:nil]; [importFailedAlert show]; } }); 

После того, как я попытался найти все, что мог найти в Google, и никто из них не работает, это то, что решило проблему для меня. Ключ в том, что я делаю это в методе делегата willDismissWithButtonIndex. Раньше я делал это в другом месте.

 - (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex { [myTextField resignFirstResponder]; [myTextField removeFromSuperview]; [myTextField release]; } 

Если в viewDidLoad имеется следующая строка, это может вызвать это сообщение. Прокомментируйте следующую строку.

 [[UIApplication sharedApplication] setStatusBarHidden:YES]; //This line should be commented 

(Вы можете отключить строку состояния из файла plist приложения).

После нескольких тестов большое правило: «Не выполнять анимацию перед анимированным увольнением или анимированным шоу».

Например:

  • не вызывать -dismissModalViewControllerAnimated:YES после обратного вызова делегирования UIAlertView -alertView: will DismissWithButtonIndex: (до тех -alertView: did DismissWithButtonIndex: выполнено с использованием -alertView: did DismissWithButtonIndex: did DismissWithButtonIndex: did DismissWithButtonIndex: callback)
  • не пытайтесь показать клавиатуру ( becomeFirstResponder ), прежде чем ваш controller просмотра becomeFirstResponder на экране.

Плохие вещи могут случиться.

Надеюсь, это будет полезно 😉

Это сработало для меня, чтобы заставить клавиатуру проявить себя сразу, без анимации или задержки.

Пусть textField является переменной экземпляра MyViewController (подclass UIViewController ).

Вызовите [textField becomeFirstResponder] в initWithNibName:bundle: (для подclassа UIViewController ) или initWithStyle: (для подclassа UITableViewController ), а не в viewDidLoad . Например:

 - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { [textField becomeFirstResponder]; } return self; } 

Или вызовите его сразу после инициализации, но прежде чем нажать UIViewController . Например:

 MyViewController *viewController = [[MyViewController alloc] init]; [viewController.textField becomeFirstResponder]; [self.navigationController pushViewController:viewController animated:YES]; [viewController release]; 

Вы выполнили [textfield becomeFirstResponder];

И после того, как вы получите значение из текстового поля в своем коде, выполните [textfield resignFirstResponder]; , Думаю, это поможет вам.

Если вы используете текущий симулятор iPhone 4.0, это сообщение об ошибке появляется часто при повороте экрана (или при анимации после поворота экрана), сопровождаемом 1-2-секундным отставанием в анимации.

Это ошибка в этой версии симулятора, и ее следует исправить в ближайшее время.

См. Здесь для получения дополнительной информации: http://www.iphonedevsdk.com/forum/iphone-sdk-development-advanced-discussion/17373-wait_fences-failed-receive-reply-10004003-a.html

Ваша проблема связана.

override viewDidappear , а не viewWillAppear :

 -(void) viewDidAppear:(BOOL) animated { [super viewDidAppear:animated]; [myTextField becomeFirstResponder]; } 

Я могу имитировать этот один на один с помощью этого кода UIAlertView.

  UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"defineTitle",@"defineTitle") message:NSLocalizedString(@"defineBody", @"defineBody") delegate:self cancelButtonTitle:NSLocalizedString(@"Ok", @"Ok") otherButtonTitles:nil]; [alert show]; 

Когда NSLocalizedString не определены в файле Localizable.strings, потребуется долго искать тексты, поэтому появится предупреждение, и будет показано сообщение «wait_fences: не удалось получить ответ: 10004003».

Мне только пришлось добавлять тексты в файлы Localizable.strings, и мои проблемы были решены. Может быть, это также относится к другим событиям?

Также с UIAlertView. То, что решило это для меня, заключалось в том, чтобы уйти в отставку, как показано ниже, как упоминалось ранее в warehouselab.

 - (void)didPresentAlertView:(UIAlertView *)alertView { [txtListingPassword becomeFirstResponder]; } - (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex { [txtListingPassword resignFirstResponder]; } 

Другие delegates UIAlertViewDelegate не исправили проблему.

Проблемы в том, что в коде Apple есть состояние гонки. Обычно это связано с неправильными обновлениями пользовательского интерфейса.

По моему опыту, вы либо не называли супер в viewDidAppear, viewWillAppear и т. Д. Или вы пытаетесь отобразить UIAlertView в viewDidLoad или viewWillAppear.

Когда вы добавляете UIAlertView, инфраструктуре требуется ссылка на родительское представление. Но если вы находитесь в viewWillAppear или viewDidLoad, представление фактически не отображается … Вам следует рассмотреть возможность перемещения кода в viewDidAppear, где представление готово к использованию UIAlertView.

Является ли текстовое поле содержащимся в этом представлении или в чем-то другом? Вы можете только отправить «startFirstRepsonder» на то, что содержится непосредственно в этом представлении. Если он хранится в другом компоненте виджета, вы не должны устанавливать первый статус ответчика в этом виджете, а скорее в виджет, который создается. Например, если вы добавляете текстовое поле в представление предупреждения, потому что показ происходит асинхронно, возможно, оно не будет к тому времени, когда вы вызовете startFirstResponder. (В идеале у вас будет свой собственный class просмотра предупреждений и определить текстовое поле внутри него, и когда этот вид получит viewDidAppear, вы должны установить текстовое поле в качестве первого ответчика в этой точке.)

Я также получаю сообщение wait_fences: failed to receive reply: 10004003 и мои viewWill... и viewDid... методы ничего не делают, кроме как отправлять сообщения super . В моем случае это случается, когда у меня отображается UIAlertView в моем GameViewController и пользователь вместо этого нажимает кнопку iPhone round device, а затем возвращается в приложение. Это выглядит из моих рук.

Alertview или таблицы действий должны отображаться на основных streamах … поэтому, если вы создаете любые синхронные соединения и выполняете эту операцию в другом streamе и показываете предупреждения на основе вывода, полученного от этой операции, вы получите это сообщение об ошибке wait_fences: не удалось получать ответ: 10004003. Вы можете сделать что-то вроде ….

 [self performSelectotOnMainThread:@selector(handleOutput:) withObject:output waitUntilDone:YES/NO]; 

и показывать предупреждения в методе handleOutput, передавая строку выходного ответа в качестве параметра.

Решение здесь!

У меня была такая же ошибка, теперь я получил решение, это может вам помочь.

 - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex{ [self performSelector:@selector(YOUR_METHOD) withObject:nil afterDelay:0.1]; } 
  • target переопределяет настройки FRAMEWORK_SEARCH_PATHS
  • Как размыть сцену в SpriteKit?
  • Рисование поэтапно в UIView (iPhone)
  • Подчеркивать префикс имени свойства?
  • Изменить цвет курсора в UITextField
  • Добавление неизвестного количества строк в «Статические ячейки» UITableView
  • XCode 4 зависает при «Присоединении к (имя приложения)»
  • Лучший способ сохранить данные на iPhone
  • objective-C - Когда использовать «я»,
  • Округлые углы на UIImage
  • Какую строку формата я использую в миллисекундах в строках даты на iPhone?
  • Interesting Posts

    Преобразование ‘ArrayList в’ String ‘в Java

    Производительность селектора jQuery с контекстом

    Как вернуть представление для HttpNotFound () в ASP.Net MVC 3?

    Сообщение об ошибке Django “Добавить аргумент related_name в определение”

    Создайте много tar-файлов из каталога с 500000 файлами

    jQuery.ajax не работает, когда URL-адрес с другого сервера

    Как надежно обнаружить установленную версию .NET 4.5?

    В чем разница между «антивирусными», «антивирусными» и «антишпионскими» инструментами?

    Невозможно установить максимальное разрешение экрана 2560×1440 с монитором DELL U2711

    Обнаружение направления прокрутки в адаптере (вверх / вниз)

    Android Studio: «Выполнение не выполнено для задачи»: app: mergeDebugResources «если проект создан на диске C:

    Как остановить открытие Apple Mail из-за назначений iCal?

    Spring Security: как исключить определенные ресурсы?

    Понимание максимального размера кучи JVM – 32 бит против 64 бит

    Идиома для кодирования типа ifelse для нескольких категорий

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