2013-08-29 11 views
7

Próbuję uzyskać filmy z biblioteki zdjęć z poniższego kodu.Ale również uzyskać listę obrazów. Jak mogę uzyskać listę wszystkich filmów? Co ja robię źle?Jak mogę uzyskać tylko filmy przy użyciu ALAssetsLibrary

NSMutableArray* assetURLDictionaries = [[NSMutableArray alloc] init]; 
xy =[[NSMutableArray alloc]init]; 
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 

void (^assetEnumerator)(ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) { 
    if(result != nil) { 
     if([[result valueForProperty:ALAssetPropertyType] isEqualToString:ALAssetTypeVideo]) { 
      [assetURLDictionaries addObject:[result valueForProperty:ALAssetPropertyURLs]]; 

      NSLog(@"result is:%@",result); 
      NSLog(@"asset URLDictionary is:%@",assetURLDictionaries); 
      NSURL *url= (NSURL*) [[result defaultRepresentation]url]; 

      [library assetForURL:url 
        resultBlock:^(ALAsset *asset) { 
         [xy addObject:[UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]]]; 
         NSLog(@" xy is:%@",xy); 
         image =[ [UIImageView alloc ] initWithImage:[xy objectAtIndex:0]]; 
         NSLog(@"image is:%@",image); 
        } 
        failureBlock:^(NSError *error){ NSLog(@"test:Fail"); } ]; 
     } 
    } 
}; 

NSMutableArray *assetGroups = [[NSMutableArray alloc] init]; 
void (^ assetGroupEnumerator) (ALAssetsGroup *, BOOL *)= ^(ALAssetsGroup *group, BOOL *stop) { 
    NSLog(@"hello"); 
    if(group != nil) { 
     [group enumerateAssetsUsingBlock:assetEnumerator]; 
     [assetGroups addObject:group]; 
     NSLog(@"Number of assets in group :%d",[group numberOfAssets]); 
     NSLog(@"asset group is:%@",assetGroups); 
    } 
}; 

assetGroups = [[NSMutableArray alloc] init]; 

[library enumerateGroupsWithTypes:ALAssetsGroupAll 
         usingBlock:assetGroupEnumerator 
        failureBlock:^(NSError *error) {NSLog(@"A problem occurred");}]; 

Odpowiedz

17

Musisz dodać ALAssetsFilter do grupy podczas wyliczenia. Tutaj podstawowym przykładem:

ALAssetsLibrary* library = [[ALAssetsLibrary alloc] init]; 

[library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) { 
    if (group) { 
     [group setAssetsFilter:[ALAssetsFilter allVideos]]; 
     [group enumerateAssetsUsingBlock:^(ALAsset *asset, NSUInteger index, BOOL *stop){ 
      if (asset){ 

       NSDictionary *meta = [[asset defaultRepresentation] metadata]; 

      } 
     }]; 
    } 
} failureBlock:^(NSError *error) { 
    NSLog(@"error enumerating AssetLibrary groups %@\n", error); 
}]; 

przypadku przyszłej odsyłającym available filters są:

- allPhotos 
- allVideos 
- allAssets 
+0

Należy zauważyć, że zgodnie z [Dokumenty] (https://developer.apple.com/library/ios/documentation /AssetsLibrary/Reference/ALAssetsLibrary_Class/Reference/Reference.html#//apple_ref/doc/constant_group/Types_of_Asset) 'ALAssetsGroupAll' jest" taki sam jak ORing ze wszystkimi typami grup z wyjątkiem 'ALAssetsGroupLibrary'". Jeśli chcesz także iTunes, użyj 'ALAssetsGroupAll | ALAssetsGroupLibrary', która "obejmuje wszystkie zasoby zsynchronizowane z iTunes". – bcattle

Powiązane problemy