Узнайте, когда мой асинхронный вызов закончен - PullRequest
2 голосов
/ 12 декабря 2011

Я перебираю список фотоальбомов на устройстве iOS. После перебора этой группы я хочу просто распечатать количество найденных альбомов.

Что я должен изменить в своем коде, чтобы оператор NSLog выполнялся только после загрузки всех альбомов.

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 Ответ

5 голосов
/ 12 декабря 2011

Ваш groupBlock получит группу из nil после завершения перечисления, поэтому измените:

if (group == nil){return;}

на

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

Из ссылки на класс:

Когда перечисление завершено, enumerationBlock вызывается с группой, настроенной на nil.

[источник]

...