在后台线程上读取领域

时间:2019-02-04 17:38:35

标签: swift realm

我确实读过documentation about threading

我确实有2个模型:艺术家,专辑和艺术家有一个专辑列表,并且专辑具有指向艺术家的链接对象。

现在,我想阅读所有艺术家和所有专辑,但是问题是,如果有很多对象,这会阻塞我的UI。我通过这样的艺术家进行迭代:

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.'

任何想法都出了什么问题,如何使用领域读取不同队列上的任何对象?我只想阅读,所以不会有写脏的机会,也不会有读脏的机会。

谢谢

0 个答案:

没有答案