Как получить доступ к смарт-папке из галереи с помощью ALAsset

Я делаю приложение, в котором я хочу получить список названий всех альбомов из галереи, включая смарт-папки (избранное, скриншоты. Это старое приложение, в котором мы использовали ALAsset для доступа к галерее в нашем приложении.

Есть ли какой-нибудь способ, с помощью которого мы можем получить доступ и к интеллектуальным папкам, используя ALAssetLibrary?

1 ответ

Этот код помогает.

   #import <AssetsLibrary/AssetsLibrary.h>

    @property (nonatomic, strong) ALAssetsLibrary *_assetsLibrary;

    - (ALAssetsLibrary *)defaultAssetsLibrary {
        static dispatch_once_t pred = 0;
        static ALAssetsLibrary *library = nil;
        dispatch_once(&pred, ^{
            library = [[ALAssetsLibrary alloc] init];
        });
        return library;
    }

    -(void) getgalleryPic
    {
        if (self.photos == nil) {
            self.photos = [[NSMutableArray alloc] init];
        }else
        {
            [self.photos removeAllObjects];
        }

        PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];

        if (status == PHAuthorizationStatusAuthorized) {
            // Access has been granted.
            NSMutableArray *collector = [[NSMutableArray alloc] initWithCapacity:0];
            ALAssetsLibrary *library = [self defaultAssetsLibrary];

            [library enumerateGroupsWithTypes:ALAssetsGroupAll
                                   usingBlock:^(ALAssetsGroup *group, BOOL *stop)
             {
                 [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop)
                  {
                      if (asset) {
                          [collector addObject:asset];
                      }else
                      {
                          self.photos = [[[collector reverseObjectEnumerator] allObjects] mutableCopy];
                          NSLog(@"photo lenght %lu",(unsigned long)[self.photos count]);
                          [_collectionVW reloadData];
                      }
                  }];
             }
                                 failureBlock:^(NSError *error) { NSLog(@"Boom!!!");}
             ];
        }

        else if (status == PHAuthorizationStatusDenied) {
            // Access has been denied.
        }

        else if (status == PHAuthorizationStatusNotDetermined) {

            // Access has not been determined.
            [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {

                if (status == PHAuthorizationStatusAuthorized) {
                    // Access has been granted.
                    NSMutableArray *collector = [[NSMutableArray alloc] initWithCapacity:0];
                    ALAssetsLibrary *library = [self defaultAssetsLibrary];

                    [library enumerateGroupsWithTypes:ALAssetsGroupAll
                                           usingBlock:^(ALAssetsGroup *group, BOOL *stop)
                     {
                         [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop)
                          {
                              if (asset) {
                                  [collector addObject:asset];
                              }else
                              {
                                  self.photos = [[[collector reverseObjectEnumerator] allObjects] mutableCopy];
                                  NSLog(@"photo lenght %lu",(unsigned long)[self.photos count]);
                                  [_collectionVW reloadData];
                              }
                          }];
                     }
                                         failureBlock:^(NSError *error) { NSLog(@"Boom!!!");}
                     ];
                }

                else {
                    // Access has been denied.
                }
            }];
        }    else if (status == PHAuthorizationStatusRestricted) {
            // Restricted access - normally won't happen.
        }


    }
Другие вопросы по тегам