ALAssets使用分离的线程来管理枚举,我必须知道枚举何时终止。
组枚举的块原型是:
typedef void (^ALAssetsLibraryGroupsEnumerationResultsBlock)(ALAssetsGroup *group, BOOL *stop)
;
如何添加完成块?
答案 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];
}
}];