Я подозреваю, что проблема в том, что вы действительно не используете диспетчерскую группу. Проблема здесь в том, что цикл for
по существу выполняется и завершается немедленно - да, эти обратные вызовы будут вызываться в более поздней точке, но это не означает, что код, сообщающий группе диспетчеризации, должен уйти.
(Кроме того, я не вижу вызов notify
в вашем примере кода, но я предполагаю, что это часть кода, который вызывается позже.)
Поэтому, если вы делаете что-то в своем коде, которое зависит от того, что эти изображения уже загружены, вы получите сообщение об ошибке. И я подозреваю, что это, вероятно, работает во второй раз, потому что вы захватываете кешированные данные, которые, вероятно, выполняются достаточно быстро для ваших целей.
Один из способов исправить это - убедиться, что вы добавляете отправку элементы группы в нужных местах. Может быть, что-то вроде этого ...
let group = DispatchGroup()
print("starting ImageSetting")
for query in friendArray {
if imageList[query.uid] == nil {
print("going through iteration")
group.enter()
self.profpicRef.child("profile_pic/" + query.uid + ".jpeg").getData(maxSize: 1
* 1024 * 1024) { (data, error) in
print("accessing image")
if let error = error {
self.imageList[query.uid] = self.defaultImage
} else {
self.imageList[query.uid] = UIImage(data: data!)
}
group.leave()
}
}
}
group.notify(queue: .main) {
print("Images done loading")
}
Вид изображения, который вы хотите отобразить сверху, должен относиться к одному из видов, а не к краю родителя. Это то место, где вы хотите, но за обоими вашими относительными взглядами, т.е. вам нужно сосредоточиться на краю родного брата. Также установите свойство возвышения, чтобы убедиться, что оно сверху.
<ImageView
android:id="@+id/ImageView"
android:layout_width="wrap_content"
android:elevation="2dp"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/siblingRelativeView1"
app:layout_constraintBottom_toBottomOf="@+id/siblingRelativeView2"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
Этот gif демонстрирует концепцию текстового просмотра к центру изображения, вам нужно отцентрировать верхнюю часть к первому относительному виду и нижнюю ко второму относительному виду.
Попробуйте прочитать это .