У меня проблема с потоками в приложении iOS. Это большое приложение, которое развивается в течение нескольких лет. (Я нахожусь в числе многих участников этого проекта и имею только глубокое понимание некоторых его частей).Проблема Threading в heightForRowAtIndexPath
В некоторых случаях приложение подвергается фоновому обновлению, которое вызывает методы делегата tableview. Иногда это вызывает следующее исключение:
*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Only run on the main thread!'
Я сделал некоторые рыть в эту проблему и определил, что во время фонового обновления бывают случаи, когда делегат методы Tableview не вызываются из основного потока.
Итак, я могу проверить, не нахожусь ли я на основном потоке, находясь внутри heightForRowAtIndexPath.
Если я не в основном потоке, я могу вызвать performSelectorOnMainThread в попытке получить высоту ячейки, единственной проблемой является то, что heightForRowAtIndexPath возвращается до того, как селектор вернется, поэтому высота ячейки будет равна нулю. Итак, это ситуация с курицей до яйца. Как заставить вызов основного потока в heightForRowAtIndexPath и быть уверенным, что он не вернется, прежде чем выполнить командуSelectorOnMainThread? Или это даже возможно? Благодаря!
Вы пытаетесь исправить ошибку. Не исправить 'heightForAtIndexPath', исправить код, который пытается перезагрузить или обновить таблицу из фонового потока. – rmaddy