使用ALAssetsLibrary访问单个图像

| 首先,请允许我说这是我第一次使用ALAssetsLibrary。我需要访问用户保存的照片库中的最新照片。似乎要这样做,我必须创建一个ALAssetsLibrary实例,并在选择最后一个图像之前遍历用户库中的每个项目。这始终是最坏的情况。是否有更快/更好的方法来解决此问题?     
已邀请:
        您不必枚举用户画廊中的所有照片。 ALAssetsGroup类具有方法“ 0”,可用于指示要枚举的资产。 在您的情况下,它只是最后一个,因此将indexSet设置为“ 1”,其中group是您的ALAssetsGroup。 如@mithuntnt所述,您可以使用
[[assetsLibrary] enumerateGroupsWithTypes:ALAssetsGroupAlbum usingBlock:^(ALAssetsGroup *group, BOOL *stop)
获得照片库的ALAssetsGroup。     
        那这个呢:
[group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
    if (result) {
       *stop = YES;
       //...
    }
}];
    
        http://developer.apple.com/library/ios/#documentation/AssetsLibrary/Reference/ALAssetsLibrary_Class/Reference/Reference.html 只有一种枚举方法。因此,这是唯一的方法。 我需要最后导入的照片。您可以有一些与此类似的过滤器。
[[assetsLibrary] enumerateGroupsWithTypes:ALAssetsGroupAlbum usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
    if( group )
    {
        NSString * groupName = [group valueForProperty:ALAssetsGroupPropertyName];

        if( [@\"Last Import\" isEqualToString:groupName] )
        {
            *stop = true;
...     
        如果您枚举设置了过滤器的ѭ5,那么接受的答案似乎无效。(因为
[group numberOfAssets]
返回的是总资产,而不是过滤后的总资产)。 我用这个:
typedef void(^SMKMostRecentPhotoCompletionBlock)(ALAsset *asset);

- (void)mostRecentPhotoWithCompletionBlock:(SMKMostRecentPhotoCompletionBlock)completionBlock
{
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    [library enumerateGroupsWithTypes:ALAssetsGroupSavedPhotos usingBlock:^(ALAssetsGroup *group, BOOL *stop) {

    __block ALAsset *mostRecentPhoto = nil;

    if (group)
    {
        [group setAssetsFilter:[ALAssetsFilter allPhotos]];
        [group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {

            if (result != NULL)
            {
                mostRecentPhoto = result;
                *stop = YES;
            }

        }];
    }

    if (completionBlock)
    {
        completionBlock(mostRecentPhoto);
    }

} failureBlock:^(NSError *error) {

    if (completionBlock)
    {
        completionBlock(nil);
    }

}];
} 在
completionBlock
中,确保检查返回的ALAsset!= nil。     

要回复问题请先登录注册