recherche

Maison  >  Questions et réponses  >  le corps du texte

ios - Comment déterminer quand une opération asynchrone (boucle) est complètement terminée?

Exigence : après avoir obtenu les informations sur l'album, obtenez la première photo et la fonction self.editImageView赋值显示.
问题 : 但是我现在想在getImageForCollectionView完全结束后来为self.editImageView赋值,那么问题来了,我如何才能判断getImageForCollectionView est terminée ?

 - (void)getImageForCollectionView{
    _library = [[ALAssetsLibrary alloc] init];
    self.photos = [NSMutableDictionary dictionary];
    [_library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
        if (group) {
            NSMutableArray *array = [NSMutableArray array];
            [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
                if (result) {
                    [array addObject:result];
                }
            }];
            [self.photos setValue:array forKey:[group valueForProperty:@"ALAssetsGroupPropertyName"]];
        }
    } failureBlock:^(NSError *error) {
       
    }];
}
曾经蜡笔没有小新曾经蜡笔没有小新2744 Il y a quelques jours831

répondre à tous(1)je répondrai

  • 黄舟

    黄舟2017-05-16 13:21:19

    Placez les opérations fastidieuses dans les threads non principaux et celles qui nécessitent des mises à jour de l'interface utilisateur dans le thread principal.

    __weak typeof(self) weakSelf = self;
    dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        // not in main block task
        [weakSelf getImageForCollectionView];
        dispatch_async(dispatch_get_main_queue(), ^{
            // main block. change ui
            NSLog(@"%@", weakSelf.photos);
        });
    });

    EDIT :

    - (void)getImageForCollectionView:(void(^)(void))callback {
        _library = [[ALAssetsLibrary alloc] init];
        self.photos = [NSMutableDictionary dictionary];
        
        dispatch_sync(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
            [_library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
                if (group) {
                    NSMutableArray *array = [NSMutableArray array];
                    [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
                        if (result) {
                            [array addObject:result];
                        }
                    }];
                    [self.photos setValue:array forKey:[group valueForProperty:@"ALAssetsGroupPropertyName"]];
                }
            } failureBlock:^(NSError *error) {
                
            }];
            dispatch_async(dispatch_get_main_queue(), ^{
                callback();
            });
        });
    }
    [self getImageForCollectionView:^{
        // ...
        NSLog(@"%@", self.photos);
    }];

    répondre
    0
  • Annulerrépondre