-
Notifications
You must be signed in to change notification settings - Fork 137
Description
Hi Team,
I am facing an issue with the AssetsPickerViewController where the selected assets in the assetsPicker(controller:selected:) method are coming in a random order instead of the order in which they were selected.
Environment:
- AssetsPickerViewController: 2.9.7
- Platform: iOS 16
- Xcode: 14.2
Description:
In my implementation of the assetsPicker(controller:selected:) method, the selected assets are not in the expected order. I expect them to be in the order in which I selected them, but they appear in a random order.
func openPhotoLibrary(imageLimit: Int) {
let pickOptions = PHFetchOptions()
pickOptions.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.image.rawValue)
pickOptions.sortDescriptors = [
NSSortDescriptor(key: "creationDate", ascending: false),
]
let pickerConfig = AssetsPickerConfig()
pickerConfig.assetsIsScrollToBottom = false
pickerConfig.assetCellType = CustomAssetCell.classForCoder()
pickerConfig.assetPortraitColumnCount = 3
pickerConfig.assetLandscapeColumnCount = 5
pickerConfig.assetsMaximumSelectionCount = imageLimit
let picker = AssetsPickerViewController()
picker.pickerConfig = pickerConfig
picker.pickerDelegate = self
picker.pickerConfig.assetFetchOptions = [
.smartAlbum: pickOptions,
.album: pickOptions
]
picker.modalPresentationStyle = .fullScreen
self.imageLimit = imageLimit
present(picker, animated: true, completion: nil)
}
func assetsPicker(controller: AssetsPickerViewController, selected assets: [PHAsset]) {func assetsPicker(controller: AssetsPickerViewController, selected assets: [PHAsset]) {
var images: [UIImage] = []
let options = PHImageRequestOptions()
options.isSynchronous = false // Set to true if you want to make the request synchronous
options.deliveryMode = .highQualityFormat
let group = DispatchGroup() // Use a dispatch group to track the completion of all requests
for item in assets {
group.enter() // Enter the group before starting each request
PHImageManager.default().requestImage(for: item,
targetSize: PHImageManagerMaximumSize,
contentMode: .aspectFit,
options: options) { (image, info) in
images.append(image ?? UIImage())
group.leave() // Leave the group after each request is completed
}
}
group.notify(queue: DispatchQueue.main) {
// All requests are completed
guard !images.isEmpty else {
return
}
(self.viewModel as! PhotosViewModel).storePhotosInRealm(images: images)
}
} // Issue is observed with the order of assets in the 'assets' array
}
@DragonCherry @felixbuenemann @stefanrenne @ebrenesc @foxware00