Find out when my asynchronous call is finished

白昼怎懂夜的黑 提交于 2019-12-08 02:08:21

问题


I iterate through a list of photo albums on a iOS device. After having iterated through this group I want to simply print out the number of albums that were found.

What do I have to change in my code that the NSLog statement is only executed, when all the albums were loaded.

ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];      
NSMutableArray *tempArray = [[NSMutableArray alloc] init];

void (^groupBlock)(ALAssetsGroup *, BOOL *) = ^(ALAssetsGroup *group, BOOL *stop){
    if (group == nil){return;}
    [tempArray addObject:group];
 };

void (^failureBlock)(NSError *) = ^(NSError *error) {
    NSLog(@"A problem occured %@", [error description]);                                     
};  

[library enumerateGroupsWithTypes:ALAssetsGroupAll
                       usingBlock:groupBlock 
                     failureBlock:failureBlock];   

NSLog(@"%i albums were loaded", tempArray.count);

回答1:


Your groupBlock will receive a group of nil when the enumeration is completed, so change:

if (group == nil){return;}

to

NSLog(@"%i albums were loaded", tempArray.count);

From the Class reference:

When the enumeration is done, enumerationBlock is invoked with group set to nil.

[source]



来源:https://stackoverflow.com/questions/8474887/find-out-when-my-asynchronous-call-is-finished

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!