I am trying to reproduce the native iOS8 photopicker using Photos framework. I got a problem with the sorting.
Lets say I do following:
In the native photopicker:
creationDate In my app I do following:
PHFetchOptions *options = [PHFetchOptions new];
options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
options.predicate = [NSPredicate predicateWithFormat:@"mediaType == %ld", PHAssetMediaTypeImage];
PHFetchResult *fetchResult = [PHAsset fetchAssetsInAssetCollection:self.assetCollection options:options];
I sort in creationDate and get following result:
creationDate Then I change my query so instead of sorting on creationDate, I sort on modificationDate. I get following result:
creationDate
So it seeme Apple change modificationDate on favourite action and probably also on other kind of actions and this mess up the sorting of the photos.
How is it possible to get exactly the sorting Apple use in its native app? Maybe some clever use of NSSortDescriptor?
swift 3
let fetchOptions = PHFetchOptions()
let sortOrder = [NSSortDescriptor(key: "creationDate", ascending: false)]
fetchOptions.sortDescriptors = sortOrder
I just found out that to copy the exact behaviour of the native photopicker the sollution was to remove my custom sortDescriptiorand just use the PHFetchResult with default behaviour. It seeme so obvious now after discovering that.
As @knutigro mentioned the solution is to use PHFetchResult with the default options i.e. by passing in nil for the options parameter:
var fetchResult: PHFetchResult!
override func viewDidLoad() {
super.viewDidLoad()
fetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: nil)
}
But the next step is reversing the sort results so that the most recent image is first. There isn't an easy way to reverse the results in PHFetchResult so I used the following method:
func assetAtIndex(index: Int) -> PHAsset {
// Return results in reverse order
return fetchResult[fetchResult.count - index - 1] as! PHAsset
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With