我正在尝试从我的设备中获取所有照片,并在集合中显示它们:
var allPhotos : PHFetchResult<PHAsset>? = nil
PHPhotoLibrary.requestAuthorization { status in
switch status {
case .authorized:
let fetchOptions = PHFetchOptions()
self.allPhotos = PHAsset.fetchAssets(with: .image, options: fetchOptions)
print("Found \(allPhotos.count) assets")
case .denied, .restricted:
print("Not allowed")
case .notDetermined:
// Should not see this when requesting
print("Not determined yet")
}
}
这段代码从设备和iCloud中获取所有照片,然后将它们存储到allPhotos
数组中。但是,当我试图在集合视图单元格中使用此函数设置它们时,我只从设备中获取照片。其他照片单元格为空。使用此函数转换图像:
func getUIImage(asset: PHAsset) -> UIImage? {
var img: UIImage?
let manager = PHImageManager.default()
let options = PHImageRequestOptions()
options.version = .original
options.isSynchronous = true
manager.requestImageData(for: asset, options: options) { data, _, _, _ in
if let data = data {
img = UIImage(data: data)
}
}
return img
}
对于一些图像,我得到这个错误“未能加载资产的图像数据“为那些空单元格。有人能解释为什么它不获取iCloud图像?
2条答案
按热度按时间4jb9z9bj1#
因为下面的代码是一个闭包。
闭包在后台线程上执行,并且不是内联的,闭包的执行可能需要时间,并且可能不会立即返回数据。
您可以尝试为要加载的图像创建一个闭包回调。
你可以试试这个,希望对你有帮助。
bmp9r5qi2#
尝试将其添加到requestOptions:
它帮了我