iphoneiosphoto-galleryphotolibrary

Get all of the pictures from an iPhone photoLibrary in an array using AssetsLibrary framework?


I want to get all of the pictures from photoLibrary. I would prefer a method or example that I can use directly.


Solution

  • //View Controller header(.h) file..

    #import <UIKit/UIKit.h>
    #include <AssetsLibrary/AssetsLibrary.h> 
    
    @interface getPhotoLibViewController : UIViewController
    {
     ALAssetsLibrary *library;
     NSArray *imageArray;
     NSMutableArray *mutableArray;
    }
    
    -(void)allPhotosCollected:(NSArray*)imgArray;
    
     @end
    

    //implementation file

    declare global count variable as

    static int count=0;
    
    @implementation getPhotoLibViewController
    
    -(void)getAllPictures
    {
     imageArray=[[NSArray alloc] init];
     mutableArray =[[NSMutableArray alloc]init];
     NSMutableArray* assetURLDictionaries = [[NSMutableArray alloc] init];
    
     library = [[ALAssetsLibrary alloc] init];
    
     void (^assetEnumerator)( ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) {
      if(result != nil) {
       if([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypePhoto]) {
        [assetURLDictionaries addObject:[result valueForProperty:ALAssetPropertyURLs]];
    
        NSURL *url= (NSURL*) [[result defaultRepresentation]url]; 
    
        [library assetForURL:url
                 resultBlock:^(ALAsset *asset) {
                  [mutableArray addObject:[UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]]];
    
                  if ([mutableArray count]==count)
                  {
                   imageArray=[[NSArray alloc] initWithArray:mutableArray];
                   [self allPhotosCollected:imageArray];
                  }
                 }
                failureBlock:^(NSError *error){ NSLog(@"operation was not successfull!"); } ]; 
    
       } 
      }
     };
    
     NSMutableArray *assetGroups = [[NSMutableArray alloc] init];
    
     void (^ assetGroupEnumerator) ( ALAssetsGroup *, BOOL *)= ^(ALAssetsGroup *group, BOOL *stop) {
      if(group != nil) {
       [group enumerateAssetsUsingBlock:assetEnumerator];
       [assetGroups addObject:group];
       count=[group numberOfAssets];
      }
     };
    
     assetGroups = [[NSMutableArray alloc] init];
    
     [library enumerateGroupsWithTypes:ALAssetsGroupAll
                            usingBlock:assetGroupEnumerator
                          failureBlock:^(NSError *error) {NSLog(@"There is an error");}];
    }
    
    -(void)allPhotosCollected:(NSArray*)imgArray
    {
     //write your code here after getting all the photos from library...
     NSLog(@"all pictures are %@",imgArray);
    }
    
    @end
    

    Use getAllPicture method to get photos from photo library.

    OR You can have a look at this blog http://mutiselectimagepicker.blogspot.in/2014/08/imageselect-to-allow-multiple-selection.html