简体   繁体   English

ALAssets 组枚举:如何检查是否完成?

[英]ALAssets groups enumeration: how to check for completion?

ALAssets use a separated thread to manage enumeration, i have to know when enumeration terminate. ALAssets 使用一个单独的线程来管理枚举,我必须知道枚举何时终止。

The block prototype for group enumeration is:组枚举的块原型是:

typedef void (^ALAssetsLibraryGroupsEnumerationResultsBlock)(ALAssetsGroup *group, BOOL *stop) ; typedef void (^ALAssetsLibraryGroupsEnumerationResultsBlock)(ALAssetsGroup *group, BOOL *stop) ;

How can i add a completion block?如何添加完成块?

I found a solution that is documented only in part.我找到了一个仅部分记录的解决方案。

When group enumeration is terminated, ALAssetsLibraryGroupsEnumerationResultsBlock is invoked with group=nil.当组枚举终止时,使用 group=nil 调用 ALAssetsLibraryGroupsEnumerationResultsBlock。 So you can write something like:因此,您可以编写如下内容:

void (^groupsEnumerator)(ALAssetsGroup *,BOOL *) = ^(ALAssetsGroup *group, BOOL *stop){ 
    if (group != nil) {
        [group enumerateAssetsUsingBlock:assetsEnumerator];

    }else {
        NSLog(@"group enumeration terminated");
    }
}; 

The same solution is valid for assets enumeration (this is not documented -.- )相同的解决方案对资产枚举有效(未记录 -.- )

 void (^assetsEnumerator)(ALAsset *,NSUInteger,BOOL*) = ^(ALAsset *result, NSUInteger index, BOOL *stop){    
    if (result !=nil) {
       //do something with result asset

    }else {
        NSLog(@"Assets enumeration terminated");
    }
};

I'm using this:我正在使用这个:

        [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {

        if (result == nil) {
            return;
        }

        if (index + 1 == group.numberOfAssets) {
        //Do what you want. Im using delegate to notify my parent class about finish.
            [delegate didGroupEnumerated:group];
        }

    }];

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM