使用AssestsLibrary框架iPhone访问库中的视频?

问题描述:

我想在以下代码的帮助下使用AssetsLibrary框架访问iPhone库中的视频......但是当我运行该应用程序代码不工作......数组资产仍然是空的?我究竟做错了什么??使用AssestsLibrary框架iPhone访问库中的视频?

顺便说一句我的iPhone是3G升级到iPhone 4.1(但资产框架是不会放弃任何错误)

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

void (^assetEnumerator)(struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) { 
     if(result != NULL) { 
       NSLog(@"See Asset: %@", result); 
       [assets addObject:result]; 

      } 
     }; 

    void (^assetGroupEnumerator)(struct ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) { 
     if(group != nil) {NSLog(@"dont See Asset: "); 
       [group enumerateAssetsUsingBlock:assetEnumerator]; 
      } 



     }; 

    assets = [[NSMutableArray alloc] init]; 
    library = [[ALAssetsLibrary alloc] init]; 
    [library enumerateGroupsWithTypes:ALAssetsGroupAlbum 
          usingBlock:assetGroupEnumerator 
         failureBlock: ^(NSError *error) { 
           NSLog(@"Failure"); 
          }]; 

4.1升级似乎已经“破'一些图像选择器示例,请遵循以下几行,它们在您发布的代码之后运行:

NSUInteger groupTypes = ALAssetsGroupAlbum | ALAssetsGroupEvent | ALAssetsGroupFaces; 
[assetsLibrary enumerateGroupsWithTypes:groupTypes usingBlock:listGroupBlock failureBlock:failureBlock]; 

这给我的4.1 iPhone和模拟器上的零资产。然而,改变groupTypes有帮助,所以设置

NSUInteger groupTypes = ALAssetsGroupAll; 

你应该开始看到一些资产。

+0

谢谢,为我工作:) – mateusmaso 2011-11-07 00:22:14

双初始化:

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

void (^assetEnumerator)(struct ALAsset *, NSUInteger, BOOL *) = ^(ALAsset *result, NSUInteger index, BOOL *stop) { 
if(result != NULL) { 
     NSLog(@"See Asset: %@", result); 
     [assets addObject:result]; 

     } 
}; 

void (^assetGroupEnumerator)(struct ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop) { 
    if(group != nil) {NSLog(@"dont See Asset: "); 
      [group enumerateAssetsUsingBlock:assetEnumerator]; 
    } 
}; 

    assets = [[NSMutableArray alloc] init]; 
    library = [[ALAssetsLibrary alloc] init**]; 
    [library enumerateGroupsWithTypes:ALAssetsGroupAlbum 
         usingBlock:assetGroupEnumerator 
        failureBlock: ^(NSError *error) { 
          NSLog(@"Failure"); 
         }]; 

我正在使用ELC图像选择器控制器,它已经在使用ALAssetsGroupAll,但仍未显示任何视频。

通过添加资产过滤器解决了。您可以限制为视频,照片或两者。我猜只有照片是默认的。如果上述失败,请考虑以下行。

[assetGroup setAssetsFilter:[ALAssetsFilter allAssets]];

我这样做在Xcode 4.1,IOS 5:

ALAssetsGroupEnumerationResultsBlock assetEnumerator = ^(ALAsset *result, NSUInteger index, BOOL *stop) { 
    if(result != NULL) { 
     NSLog(@"See Asset: %@", result); 
     [assets addObject:result]; 

    } 
}; 

ALAssetsLibraryGroupsEnumerationResultsBlock assetGroupEnumerator = ^(ALAssetsGroup *group, BOOL *stop) { 
    if(group != nil) {NSLog(@"dont See Asset: "); 
     [group enumerateAssetsUsingBlock:assetEnumerator]; 
    } 
}; 

assets = [[NSMutableArray alloc] init]; 
library = [[ALAssetsLibrary alloc] init]; 
[library enumerateGroupsWithTypes:ALAssetsGroupAlbum 
         usingBlock:assetGroupEnumerator 
        failureBlock: ^(NSError *error) { 
         NSLog(@"Failure"); 
        }]; 

它为我工作。