我正在尝试使用Photos框架重现原生iOS8 photopicker。我的排序有问题。
让我说我做了以下事情:
在原生的photopicker中:
creationDate
在我的应用程序中,我执行以下操作:
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];
我在creationDate
中排序并得到以下结果:
creationDate
然后我更改了我的查询,而不是在creationDate
上排序,我对modificationDate
进行排序。我得到以下结果:
creationDate
所以看来Apple改变了modificationDate
最喜欢的动作,也可能改变其他类型的动作,这搞乱了照片的分类。
如何才能准确地获得Apple在其原生应用中使用的排序?也许聪明地使用NSSortDescriptor
?
答案 0 :(得分:5)
正如@knutigro所提到的,解决方案是使用<iframe allowfullscreen>
和默认选项,即为PHFetchResult
参数传递nil
:
options
但下一步是撤消排序结果,以便最新的图像是第一个。在PHFetchResult中没有一种简单的方法来反转结果,所以我使用了以下方法:
var fetchResult: PHFetchResult!
override func viewDidLoad() {
super.viewDidLoad()
fetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: nil)
}
答案 1 :(得分:5)
swift 3
let fetchOptions = PHFetchOptions()
let sortOrder = [NSSortDescriptor(key: "creationDate", ascending: false)]
fetchOptions.sortDescriptors = sortOrder
答案 2 :(得分:4)
我刚刚发现要复制原生photopicker的确切行为,sollution是删除我的自定义sortDescriptior
,只使用默认行为PHFetchResult
。在发现之后,它现在显而易见。
答案 3 :(得分:2)
您可以尝试使用两种排序描述符:
NSSortDescriptor sortDesc1 = [NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
NSSortDescriptor sortDesc2 = [NSSortDescriptor sortDescriptorWithKey:@"modificationDate" ascending:NO]];
options.sortDescriptors = @[sortDesc1, sortDesc2];
Haven未经测试,只是认为它可能有用。
答案 4 :(得分:0)
不要问我为什么和怎么做,但是当我设置排序说明时。它的工作方式类似于“照片”应用程序(最近)。
[options setSortDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"burstIdentifier" ascending:NO]]];
尝试一下。