#swift #uicollectionview #metadata
Вопрос:
Я хочу получить «предварительный просмотр ссылок» в ячейке collectionview с помощью LPMetaDataProvider.
Все работает хорошо. Но всякий раз, когда прокручивается представление коллекции и ячейка исчезает (или отображается снова), я получаю эту ошибку:
«Пытаюсь начать выборку на LPMetadataProvider, который уже запущен. LPMetadataProvider-это одноразовый объект.» Есть идеи ?
var urlString: String?
var previewCell: LinkModel? {
didSet {
urlString = previewCell?.linkURL
fetchPreview()
}
}
let linkPreview = LPLinkView()
let provideer = LPMetadataProvider()
override init(frame: CGRect) {
super.init(frame: frame)
contentView.backgroundColor = .black
}
fileprivate func fetchPreview() {
guard let url = URL(string: urlString ?? "") else {return}
provideer.startFetchingMetadata(for: url) { metaData, error in
guard let data = metaData, error == nil else {
return
}
DispatchQueue.main.async {
self.linkPreview.metadata = data
self.contentView.addSubview(self.linkPreview)
self.linkPreview.frame = (self.contentView.bounds)
}
}
}
Если я вызову функцию в «переопределить инициализацию», все будет работать нормально, но на этот раз она не получит «urlString» из didset. Я буду рад, если вы поможете
Комментарии:
1. Большое вам спасибо, это имеет смысл и работает @Sweeper
Ответ №1:
Создайте provider
локальную переменную в fetchPreview
.
fileprivate func fetchPreview() {
guard let url = URL(string: urlString ?? "") else { return }
let provideer = LPMetadataProvider()
provider.startFetchingMetadata(for: url) { metaData, error in
...
«Одноразовый» означает, что вы должны использовать этот объект один раз, а затем выбросить его.