4

调用 fetchAssetCollectionsWithType 时,我可以轻松获得大多数集合类型的正确排序结果。例如:

fetchOptions = [[PHFetchOptions alloc] init];
fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"localizedTitle" ascending:YES],];
PHFetchResult *topLevelUserCollections = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:fetchOptions];

我得到正确排序的所有专辑,如果我颠倒排序顺序,我会得到相反的结果。

当我对 PHAssetCollectionTypeSmartAlbum 执行相同操作时:

PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"localizedTitle" ascending:YES],];
PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAny options:fetchOptions];

结果不会以特定的顺序返回,尽管每次都是相同的顺序。颠倒顺序或将排序描述符更改为“endDate”等其他内容对结果没有影响。我已经验证这些项目实际上具有这样的属性:

for (PHAssetCollection *aSmartAlbum in smartAlbums){
    NSLog(@"localizedTitle - %@, estimatedCount - %u", aSmartAlbum.localizedTitle, (int)(aSmartAlbum.estimatedAssetCount == NSNotFound ? 0 : aSmartAlbum.estimatedAssetCount));
}

这会产生这样的日志:localizedTitle - 视频,估计计数 - 0 本地化标题 - 全景图,估计计数 - 0 本地化标题 - 延时,估计计数 - 0 本地化标题 - 慢动作,估计计数 - 0 本地化标题 - 突发,估计计数 - 0 本地化标题 - 收藏夹,估计计数- 0 本地化标题 - 所有照片,估计计数 - 0 本地化标题 - 隐藏,估计计数 - 0 本地化标题 - 最近添加,估计计数 - 0

有没有人让它正确排序?

我最终基本上将结果拉入一个数组并对其进行排序。我只是碰巧首先想要相机胶卷和收藏夹。

    PHFetchOptions *fetchOptions = [PHFetchOptions new];
    PHFetchResult* unorderedSmart = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAny options:fetchOptions];

    PHAssetCollection* allPhotos;
    PHAssetCollection* favorites;
    NSMutableArray* orderedSmart = [NSMutableArray array];
    for (PHAssetCollection *aSmartAlbum in unorderedSmart){
        if (aSmartAlbum.assetCollectionSubtype == PHAssetCollectionSubtypeSmartAlbumUserLibrary) {
            allPhotos = aSmartAlbum;
        }else if (aSmartAlbum.assetCollectionSubtype == PHAssetCollectionSubtypeSmartAlbumFavorites){
            favorites = aSmartAlbum;
        }else{
            [orderedSmart addObject:aSmartAlbum];
        }
    }

    [orderedSmart sortUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
        PHAssetCollection* ac1 = obj1;
        PHAssetCollection* ac2 = obj2;

        return [ac1.localizedTitle localizedCaseInsensitiveCompare:ac2.localizedTitle];
    }];

    if (favorites) {
        [orderedSmart insertObject:favorites atIndex:0];
    }
    if (allPhotos) {
        [orderedSmart insertObject:allPhotos atIndex:0];
    }
4

0 回答 0