2016-09-08 1 views
0

en essayant de présenter une liste de tous les titres d'albums dans mon iphone et quand j'appuie sur un titre je veux qu'il présente toutes les photos de cet album spécifique une collection view.I je utilise le cadre « PhotosUI » et j'utiliser ce code pour obtenir les titres de l'album:PHAssetCollection pour "Camera Roll" et "My Photo Stream" est vide

-(void)getLibrariesList 
{ 
    NSArray *collectionsFetchResults; 
    albumNames = [[NSMutableArray alloc] init]; 

    PHFetchResult *smartAlbums = [PHAssetCollection  fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum 
                       subtype:PHAssetCollectionSubtypeAlbumRegular options:nil]; 
    PHFetchResult *syncedAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum 
                      subtype:PHAssetCollectionSubtypeAlbumSyncedAlbum options:nil]; 
    PHFetchResult *userCollections = [PHCollectionList fetchTopLevelUserCollectionsWithOptions:nil]; 

    PHFetchOptions *userAlbumsOptions = [PHFetchOptions new]; 
    userAlbumsOptions.predicate = [NSPredicate predicateWithFormat:@"estimatedAssetCount > 0"]; 



    // Add each PHFetchResult to the array 
    collectionsFetchResults = @[smartAlbums, userCollections, syncedAlbums]; 

    for (int i = 0; i < collectionsFetchResults.count; i ++) { 

     PHFetchResult *fetchResult = collectionsFetchResults[i]; 

     for (int x = 0; x < fetchResult.count; x ++) { 

      PHCollection *collection = fetchResult[x]; 

      albumNames[x] = collection.localizedTitle; 

     } 
    } 
    //update the tableview 
    [self.libraryTableView reloadData]; 
} 

et ce code pour obtenir toutes les photos de l'album spécifique par son titre:

-(void)showPhotosInCollectionViewForALbumWithName:(NSString*)albumName 
{ 
    libraryAssets = [NSMutableArray array]; 

    __block PHAssetCollection *collection; 

    // Find the album 
    PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init]; 
    fetchOptions.predicate = [NSPredicate predicateWithFormat:@"title = %@", albumName]; 
    collection = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum 
                  subtype:PHAssetCollectionSubtypeAny 
                  options:fetchOptions].firstObject; 

    PHFetchResult *collectionResult = [PHAsset fetchAssetsInAssetCollection:collection options:nil]; 

    [collectionResult enumerateObjectsUsingBlock:^(PHAsset *asset, NSUInteger idx, BOOL *stop) { 


     [libraryAssets addObject:asset]; 
    }]; 
    [self.libraryPhotosCollectoionView reloadData]; 
} 

pour certains albums ça marche, des albums comme "Instagram" et des albums que j'ai créés avec mon téléphone mais quand j'appuie sur les albums "Camera Roll" et "My Photo Stream", cela montre quoi que ce soit.

des idées pourquoi cela se passe-t-il ou s'il y a une autre façon de récupérer toutes les photos de mon appareil?

Répondre

1

J'ai une réponse. Je récupère toutes les photos de la pellicule & Vidéos. Voici mon code.

PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init]; 
collection = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum 
                 subtype:PHAssetCollectionSubtypeSmartAlbumUserLibrary 
                 options:fetchOptions].firstObject; 

collectionResult = [PHAsset fetchAssetsInAssetCollection:collection options:nil]; 
NSLog(@"Custom album images::%@",collectionResult); 


[collectionResult enumerateObjectsUsingBlock:^(PHAsset *asset, NSUInteger idx, BOOL *stop) 
{ 
    NSLog(@"Custom album::%@",asset); 
    NSLog(@"Collection Result Count:%lu", (unsigned long)self.collectionResult.count); 

    //add assets to an array for later use in the uicollectionviewcell 
}];