Когда вы используете UIImageView
расширения поиска асинхронного изображения, они неизменно отменяют предыдущий запрос для этого представления изображения при запросе другого изображения для того же представления изображения. (Как правило, это предусмотрено проектом, так как он предотвращает засорение запроса изображений запросами предыдущих изображений для того же представления изображений, которые больше не нужны, например, представление изображений в ячейке табличного представления, которое можно использовать повторно.)
Проблема в том, что расширение UIImageView
SDWebImage не вызывает обработчик завершения, если поиск изображения был отменен. Это ошибка разработки API, IMHO, поскольку асинхронные методы всегда должны вызывать обработчик их завершения (с «отмененным» кодом ошибки, если запрос был отменен). Но поскольку SDWebImage этого не делает, первоначальные запросы вашего цикла отменяются вместо последующих запросов, и в результате ваши leave
вызовы для более ранних итераций никогда не будут вызваны. К вашему сведению, другие библиотеки изображений, такие как KingFisher , не страдают этим недостатком дизайна (хотя и имеют свои собственные проблемы).
Но возникает вопрос о том, каково было ваше намерение. Например, если вы хотите увидеть последовательность изображений последовательно, то вам не следует начинать поиск следующего изображения до тех пор, пока не будет выполнено предыдущее (например, начать поиск следующего изображения в обработчике завершения предыдущего). Или, возможно, вам следует просто получить изображения самостоятельно (не используя расширение UIImageView
, которое отменяет предыдущие запросы) и выполнить там некоторое обновление вашего пользовательского интерфейса. Но вы почти наверняка не хотите инициировать несколько одновременных обновлений изображений для одного и того же представления изображений.