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

时间:2011-04-28 12:20:41

标签: iphone objective-c ios

ALAssets使用分离的线程来管理枚举,我必须知道枚举何时终止。

组枚举的块原型是:

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

如何添加完成块?

2 个答案:

答案 0 :(得分:9)

我找到了一个仅部分记录的解决方案。

当组枚举终止时,将使用group = nil调用ALAssetsLibraryGroupsEnumerationResultsBlock。所以你可以这样写:

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

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

相同的解决方案对资产枚举有效(未记录 - .-)

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

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

答案 1 :(得分:1)

我用这个:

        [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];
        }

    }];