Вы имеете дело с состоянием гонки, которое связано с асинхронностью функции getFirstObjectInBackground из PFUser.query () и тем, что ваши ячейки удаляются из системы и повторно используются системой до возвращения закрытия этой функции.
В целях экономии памяти система создает только ограниченное количество ячеек и повторно использует их при прокрутке представления коллекции или просмотра таблицы.Затем он удаляет эти ячейки и перенастраивает их с данными, относящимися к их индексным путям.
Когда вы вызываете getFirstObjectInBackground (), его закрытие захватывает self .Ваша проблема в том, что self на данный момент используется повторно.Он расположен по другому пути индекса и настроен с другими данными, поэтому изображение, только что возвращенное вам асинхронно, больше не является свежим или уместным.
Я бы посоветовал выяснить, как отменить эти запросы изображений, если вы знаете, что они вам не понадобятся, поскольку ячейка прокручивалась мимо видимой, и проверять работоспособность внутри крышки, чтобы убедиться, что элемент по-прежнему соответствует вашим требованиям.ожидайте, что это будет так:
guard presentable == self?.presentable else {return}
self?.profileImageView.setImage(url: (user?.object(forKey: "picture") as? PFFile)?.url, fallbackText: presentable.username)