我确实读过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.'
任何想法都出了什么问题,如何使用领域读取不同队列上的任何对象?我只想阅读,所以不会有写脏的机会,也不会有读脏的机会。
谢谢