私は[PHCachingImageManager]を使ってビデオをコレクションビューにキャッシュしています。私はキャッシュマネージャで生成された画像を表示できますが、AVAssetsをプルすることはできません。PHCacheImageManager.requestAVAsset(forVideo:...)はnilを返しますAVAsset
.requestAVAsset(forVideo:...)メソッドを使用してAVAssetを取得しようとしましたが、結果ハンドラに返される[asset]はnilです。返された[資産]をアンラップしようとするとエラーが発生します。
私は結果ハンドラに返された[audioMix]と[info]パラメータも調べましたが、それはうまくいきませんでした。誰も私が間違っている/ここで行方不明を知っていますか?
viewDidLoad() {
let videosAlbum = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .smartAlbumVideos, options: nil)
self.videoAssets = PHAsset.fetchAssets(in: videosAlbum.object(at: 0), options: nil)
self.imgCacheManager.startCachingImages(for: self.videoAssets.objects(at: [0, videoAssets.count-1]), targetSize: CGSize(width: 150, height: 150), contentMode: .aspectFit, options: nil)
}
override func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
let selectedAsset = self.imgCacheManager.requestAVAsset(forVideo: self.videoAssets.object(at: indexPath.item), options: nil, resultHandler: {
asset,_,_ in
self.delegate.selectedVideo(Asset: asset!) // this is the line I get the error
})
}
私のデリゲートはオプションですが、確かにそれで何かを持っているので、私はそれがエラーを投げ、それが開封された[資産]です確信しています。
ありがとうございます!コードをSwift4にアップグレードした後、この問題に直面し、 'options.isNetworkAccessAllowed = true'が助けになりました。 –