Я прочитал документацию о потоках
У меня есть 2 модели: у Исполнителя, Альбома и Исполнителя есть список Альбомов, а в альбомах есть объекты, связывающие их с Художниками.
Теперь я хочу прочитать всех исполнителей и все альбомы, но проблема в том, что это блокирует мой пользовательский интерфейс, если там много объектов.Я перебираю исполнителей следующим образом:
let artists = realm.objects(Artist.self)
artists.forEach({ (artist: Artist) in
// do something with artist
artist.albums.forEach({ (album: Album) in
// do something with albums
})
})
Это очень медленно и блокирует мой основной поток, поэтому я решил поместить его в асинхронную фоновую очередь.Проблема заключается в том, что область не может быть доступна из другого потока.Итак, я сделал это:
let artistsRefs = ThreadSafeReference(to: artists)
DispatchQueue(label: "background").async {
let config = Realm.Configuration()
let realm = try! Realm(configuration: config)
guard let artists = realm.resolve(artistsRefs) else {
return
}
artists.forEach { (artist: Artist) in
// do something with artists
artist.albums.forEach{ (album: Album) in
// do something with albums
}
}
}
Я продолжаю получать сообщение об ошибке, однако, что область была получена из неправильного потока.
*** Terminating app due to uncaught exception 'RLMException', reason: 'Realm accessed from incorrect thread.'
Любая идея, что не так и как я могу прочитать любойобъект в другой очереди, используя область?Я просто хочу читать, чтобы не было шансов на грязную запись и шансов на грязное чтение.
Спасибо