5

我正在尝试借助以下代码使用 AssetsLibrary Framework 访问 iPhone 库中的视频……但是当我运行应用程序时,代码不起作用……数组资产仍然为空?我究竟做错了什么?

顺便说一句,我的 iPhone 是升级到 iPhone 4.1 的 3G。(但资产框架没有给出任何错误)

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

4 回答 4

5

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

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

这在我的 4.1 iPhone 和模拟器上都提供了零资产。但是更改 groupTypes 会有所帮助,因此请设置

 NSUInteger groupTypes = ALAssetsGroupAll;

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

于 2010-10-26T19:03:09.547 回答
2

我在 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");
                     }];

它对我有用。

于 2012-02-28T03:10:31.140 回答
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");
                         }];
于 2010-10-24T12:47:35.280 回答
0

我正在使用 ELC 图像选择器控制器,它已经在使用 ALAssetsGroupAll 并且仍然没有显示任何视频。

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

[assetGroup setAssetsFilter:[ALAssetsFilter allAssets]];
于 2012-02-27T13:19:13.163 回答