Я надеялся, что ответы на вопрос squeezemylime решат мою проблему, так как у меня также есть UIAlertView без текстового поля, но это не сработало. Вместо текстового поля я поместил на него анимацию UIActivityIndicatorView, и при создании кнопки не использовались. Таким образом, предупреждение отключается программно, так что метод делегата уничтожает счетчик в предупреждении и само предупреждение (которое было сохранено в течение времени).
Итак, я получаю также эти wait_fences: сообщения в отладчике, и я тем временем замерз, потому что все, что я пробовал, включая ценные подсказки в этой теме, не убьет эти wait_fences: сообщений. Сбоев нет ни с GDB, ни на устройстве.
Проходя по коду, я понял, что сообщение wait_fences: отображается сразу после делегата для dismissWithClickedButtonIndex: 0 animated: NO освобождает сомнительный UIAlertView. Тогда я подумал, что это может быть похоже на методику задержки squeezemylime , и сделал это:
[theAlertObj performSelector:@selector(dismissWithClickedButtonIndex:animated:) withObject:nil afterDelay:0.1];
и сообщение wait_fences: пропало! Но вызов dismissWithClickedButtonIndex: animated: не может быть удовлетворен, поскольку отсутствует второй аргумент animated: NO - поэтому я попробовал его с некоторыми изменениями, реализуя метод для вызова:
- (void)dismissNamedAlert: (UIAlertView*)alert
{
[alert dismissWithClickedButtonIndex:0 animated:NO];
}
- (void)postProcessLogicalWork: (id)arg
{
[self performSelector:@selector(dismissNamedAlert:) withObject:theAlertObj afterDelay:0.2];
...
}
Облом: вновь появилось сообщение wait_fences: ! Я думаю, что не могу вернуться к рабочему решению с неудовлетворенным вызовом метода - так как это можно сделать? И / или при каких обстоятельствах появляются эти wait_fences: сообщения?
Вкратце рабочий процесс для моей вещи такой:
- viewDidAppear вызывает его super , а затем мой модуль обновления данных afterDelay: 0.3f
- средство обновления данных вызывает новый поток для процедуры обновления
- новый поток создает и отображает предупреждение с вращателем в главном потоке, а затем запускается в течение нескольких секунд
- новый поток выполняет завершающую процедуру для основного потока и выполняется
- Финишер отклоняет предупреждение, как описано выше (с wait_fences: ) и обновляет дисплей при необходимости
- остальное время простоя ... на данный момент
Есть идеи, что делать?