2015-01-22 5 views
14

Sto utilizzando il framework Photos per recuperare l'elenco di album in iOS8. Sono in grado di farlo utilizzandoRecupera solo foto di tipo PHAssetMediaTypeImage tipo asset asset collection PHAssetCollectionTypeSmartAlbum

PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil]; 

Questo mi dà un elenco di tutti gli album intelligenti inclusi video. Come posso filtrare i video da questo elenco. Ho bisogno solo di immagini.

L'aiuto sarebbe apprezzato. Grazie.

risposta

23

È necessario impostare le opzioni di recupero, ha una proprietà predicate, che può essere utilizzata per filtrare i video. Di seguito è riportato un esempio di come farlo.

PHFetchResult *smartAlbums = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeSmartAlbum subtype:PHAssetCollectionSubtypeAlbumRegular options:nil]; 

//set up fetch options, mediaType is image. 
PHFetchOptions *options = [[PHFetchOptions alloc] init]; 
options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]]; 
options.predicate = [NSPredicate predicateWithFormat:@"mediaType = %d",PHAssetMediaTypeImage]; 

for (NSInteger i =0; i < smartAlbums.count; i++) { 
    PHAssetCollection *assetCollection = smartAlbums[i]; 
    PHFetchResult *assetsFetchResult = [PHAsset fetchAssetsInAssetCollection:assetCollection options:options]; 

    NSLog(@"sub album title is %@, count is %ld", assetCollection.localizedTitle, assetsFetchResult.count); 
    if (assetsFetchResult.count > 0) { 
     for (PHAsset *asset in assetsFetchResult) { 
      //you have got your image type asset. 
     } 
    } 
} 
+6

@grabler si sta gettando questo errore: 'predicato non supportata nelle opzioni di recupero: mediaType == 1' –

+1

@AnishKumar, non capita di io, da [qui] (https://forums.developer.apple.com/thread/17498), problema simile su iOS 9.1, prova l'aggiornamento a iOS 9.2. – gabbler

16

di fare la stessa cosa in rapida:

let fetchOptions = PHFetchOptions() 
fetchOptions.predicate = NSPredicate(format: "mediaType = %d", PHAssetMediaType.Image.rawValue) 
Problemi correlati