Я пишу программу, которая отображает в UITextView, похожем на консоль, различные события, генерируемые моей AudioSession и AudioQueues. Например, когда я обнаруживаю, что мой аудио маршрут изменился, я просто хочу, чтобы на экране моего iPhone отобразилось быстрое сообщение о том, что это произошло. К сожалению, я полагаю, что попадаю в состояние гонок, и я не уверен, что это лучшее решение.
Когда я запускаю свою программу, моя консоль отладки выдает это:
bool _WebTryThreadLock (bool), 0x1349a0: попытался получить веб-блокировку из потока, отличного от основного или веб-потока. Это может быть результатом обращения к UIKit из вторичного потока. Грохнуть сейчас ...
Это происходит в строке кода:
textView.text = string;
Я пробовал это:
[textView performSelectorOnMainThread:@selector(setText:) withObject:string waitForDone:YES];
И это, казалось, исправило это, но я почти уверен, что я не должен делать что-то подобное, чтобы заставить это работать. К сожалению, это не работает с [UITextView scrollVisibleWithRange:], поскольку для этого требуется NSRange, который не является потомком NSObject. Я думаю, что то, что я делаю, в корне неправильно.
Этот код вызывается из прослушивателя прерываний, который запускается из потока аудио-очереди. Есть ли что-то, что я должен сделать, чтобы мои обновления текстового поля блокировались, поэтому у меня нет этой проблемы?
Спасибо.