Царство читается в фоновом потоке - PullRequest
0 голосов
/ 04 февраля 2019

Я прочитал документацию о потоках

У меня есть 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.'

Любая идея, что не так и как я могу прочитать любойобъект в другой очереди, используя область?Я просто хочу читать, чтобы не было шансов на грязную запись и шансов на грязное чтение.

Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...