Я получаю эту загадочную ошибку в первый раз (и только в первый раз), когда мое представление загружается из-за следующей строки кода:
- (void)viewWillAppear:(BOOL)animated
{
[textField becomeFirstResponder];
}
Из-за этого есть заметная задержка (~ 3-4 секунды, даже на симуляторе), из-за которой мое приложение не отвечает. Кто-нибудь знает, как это исправить? Я не могу найти по нему документацию на сайте Apple или какие-либо решения здесь или в Google.
Как ни странно, происходит обратная ситуация, если я вставляю строку -viewDidAppear:
вместо -viewWillAppear:
; то есть вместо того, чтобы печатать ошибку только при первом отображении клавиатуры и никогда больше, ошибка печатается не в первый раз, а каждый раз после. Это вызывает у меня сильную головную боль.
источник
becomeFirstResponder
показать клавиатуру сразу, без промедления .Я получал аналогичную ошибку, когда быстро:
Я заметил, что получаю это только в симуляторе, а не на устройстве. Вдобавок я попадал в бесконечный цикл.
Мое решение заключалось в том, чтобы отложить представление нового модального представления. Похоже, что быстрое обновление иерархии представлений вызвало некоторую состязательность в коде Apple.
Имея это в виду, попробуйте следующее:
У вас могут возникнуть проблемы с отображением клавиатуры для UITextField, который еще не отображается на экране. Это может вызывать проблемы, похожие на мои.
Кроме того, на всякий случай вы делаете паузу, давая иерархии время для обновления, прежде чем показывать клавиатуру.
Надеюсь это поможет.
источник
Убедитесь, что вы взаимодействуете только с пользовательским интерфейсом в основном потоке. Я получил,
wait_fences: failed to receive reply: 10004003
пока сидел и ждал, пока отобразится UIAlertView около 5 секунд, потому что соответствующий код был выполнен в фоновом потоке. Вы можете убедиться в этом, поместив свой код в блок и отправив его в основной поток:источник
После того, как я попробовал все, что смог найти в Google, и ничего не заработало, это решило проблему для меня. Ключ в том, что я делаю это в методе делегата willDismissWithButtonIndex. Раньше я делал это в другом месте.
источник
Если у вас есть следующая строка в viewDidLoad, это может вызвать это сообщение. Прокомментируйте следующую строку.
(Вместо этого вы можете отключить строку состояния из файла plist приложения).
источник
После нескольких тестов большое правило гласит: «Не выполняйте анимацию перед анимированным увольнением или анимационным шоу».
Например:
-dismissModalViewControllerAnimated:YES
после обратного вызова делегирования (дождитесь исчезновения из представления предупреждения, прежде чем делать это с помощью обратного вызова)UIAlertView -alertView:
will
DismissWithButtonIndex:
-alertView:
did
DismissWithButtonIndex:
becomeFirstResponder
), пока ваш контроллер представления не появится на экране.Могут случиться плохие вещи.
Надеюсь, это будет полезно ;-)
источник
Это помогло мне заставить клавиатуру показать себя немедленно, без анимации и задержки.
Позвольте
textField
быть переменной экземпляраMyViewController
(подклассаUIViewController
).Позвоните
[textField becomeFirstResponder]
вinitWithNibName:bundle:
(для подклассаUIViewController
) илиinitWithStyle:
(для подклассаUITableViewController
), а не вviewDidLoad
. Например:Или вызовите его сразу после инициализации, но перед нажатием
UIViewController
. Например:источник
view
, поэтому не уверен, что файл пера загружен. ЕслиtextField
это IBOutlet, то я думаю, что на данном этапе он будет нулевым.Ты сделал
[textfield becomeFirstResponder];
И после того, как вы получите значение из текстового поля в своем коде, сделайте
[textfield resignFirstResponder];
. Думаю, это вам поможет.источник
Если вы используете текущую версию iPhone Simulator 4.0, это сообщение об ошибке часто появляется при повороте экрана (или при анимации после поворота экрана), сопровождаемой задержкой в 1-2 секунды в анимации.
Это ошибка в данной версии симулятора, и ее вскоре следует исправить.
источник
wait_fences
сообщение неСм. Здесь для получения дополнительной информации: http://www.iphonedevsdk.com/forum/iphone-sdk-development-advanced-discussion/17373-wait_fences-failed-receive-reply-10004003-a.html
Ваша проблема связана.
источник
переопределить
viewDidappear
, а неviewWillAppear
:источник
Я могу смоделировать это один на один с помощью этого кода UIAlertView.
Когда NSLocalizedString не определены в файле Localizable.strings, поиск текстов займет слишком много времени, поэтому будет показано предупреждение и «wait_fences: не удалось получить ответ: 10004003».
Мне достаточно было добавить тексты в файлы Localizable.strings, и мои проблемы были решены. Может быть, это относится и к другим случаям?
источник
Также с UIAlertView. Что решило это для меня, так это отставка, как показано ниже, как упоминалось ранее.
Другие делегаты UIAlertViewDelegate не устранили проблему.
источник
Проблема в том, что в коде Apple есть состояние гонки. Обычно это связано с неправильными обновлениями пользовательского интерфейса.
По моему опыту, вы либо не вызывали super в viewDidAppear, viewWillAppear и т. Д., Либо пытаетесь отобразить UIAlertView в viewDidLoad или viewWillAppear.
Когда вы добавляете UIAlertView, фреймворку требуется ссылка на ваше родительское представление. Но если вы находитесь в viewWillAppear или viewDidLoad, представление на самом деле не отображается ... Вам следует подумать о перемещении кода в viewDidAppear, где представление готово для использования UIAlertView.
источник
Содержится ли текстовое поле в этом представлении или в чем-то еще? Вы можете отправить «статьFirstRepsonder» только тому, что содержится непосредственно в этом представлении. Если он хранится в каком-либо другом компоненте виджета, вы не должны устанавливать статус первого респондента в этом виджете, а скорее в создаваемом виджете. Например, если вы добавляете текстовое поле в представление предупреждений, поскольку шоу происходит асинхронно, оно может не быть активным к тому времени, когда вы вызовете метод beginFirstResponder. (В идеале у вас должен быть собственный класс представления предупреждений и определение текстового поля в нем, и когда это представление получит viewDidAppear, вы должны установить текстовое поле в качестве первого респондента в этот момент.)
источник
Я также получаю сообщение
wait_fences: failed to receive reply: 10004003
и моиviewWill...
иviewDid...
методы ничего не делать , но отправлять сообщенияsuper
. В моем случае это происходит, когда у меня естьUIAlertView
показ,GameViewController
и пользователь вместо этого нажимает круглую кнопку устройства iPhone, а затем возвращается в приложение. Это выглядит не из моих рук.источник
Alertview или таблицы действий должны отображаться в основных потоках ... поэтому, если вы создаете какие-либо синхронные соединения и выполняете эту операцию в другом потоке и показываете предупреждения на основе выходных данных, полученных от этой операции, вы получите это сообщение об ошибке wait_fences: failed to получить ответ: 10004003. Вы можете сделать что-то вроде ....
и показывать предупреждения в методе handleOutput, передавая строку выходного ответа в качестве параметра.
источник
Решение здесь!
У меня была такая же ошибка, теперь у меня есть решение, это может вам помочь.
источник