ALAssetsGroup enumerateAssetsUsingBlock: не возвращать активы - PullRequest
0 голосов
/ 19 января 2012

Я реализовал пользовательскую галерею с двумя UIViewController подклассами: AlbumController и PhotosController. Первый показывает все альбомы галереи, а второй - все фотографии из выбранного альбома.

Все работает нормально, за исключением случаев, когда я загружаю изображения из удаленного репозитория (на данный момент Flickr) в альбом Camera Roll. В этом случае, когда я захожу на AlbumController, я вижу все альбомы, и обложка альбома Camera Roll обновляется с последним загруженным изображением, но когда я перехожу на PhotosController для альбома Camera Roll, я ничего не вижу Если я войду в альбом Camera Roll после того, как все изображения будут загружены, я увижу их все.

PhotosController.h:

ALAssetsGroup *album;

PhotosController.m:

-(void) viewDidAppear:(BOOL)animated{
    if( albumHasChanged ){
        [self performSelectorInBackground:@selector(prepareAlbumPhotos) 
                               withObject:nil];
        [self performSelector:@selector(reloadPhotosTableView) 
                   withObject:nil 
                   afterDelay:.5];            
        albumHasChanged = NO;
    }
}

#pragma mark - Private methods

-(void)prepareAlbumPhotos {
    [albumAssets removeAllObjects];

    @autoreleasepool {
        [self.album enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) 
         {
             // No assets are returned while images are being downloaded!!

             // ... albumAssets gets filled
         }];

        [self reloadPhotosTableView];
    }
}

-(void) reloadPhotosTableView{
    [photosTableView reloadData];
}

Внутри другого класса я загружаю изображения и добавляю их в галерею примерно так:

UIImage *img = [UIImage imageWithData:data];
UIImageWriteToSavedPhotosAlbum(img, nil, nil, nil);    

Кто-нибудь может объяснить, почему enumerateAssetsUsingBlock: не возвращает никаких активов при записи изображений в ALAssetsGroup?

Есть ли обходной путь для чтения ресурсов из альбома Camera Roll в этом случае?

1 Ответ

0 голосов
/ 20 января 2012

Проблема заключалась в том, что каждый раз, когда вы сохраняете новое изображение в галерее телефона, ссылка на Фотопленку ALAssetsGroup изменяется и больше не действительна (хотя не ноль).

В моем случае язагружал и писал много изображений, поэтому каждый раз, когда я пытался просмотреть их в своей галерее, ссылка на альбом менялась, и поэтому enumerateAssetsUsingBlock: ничего не возвращал.

Чтобы избежать этой проблемы, сначалаЯ загружаю все изображения в папку, а затем копирую изображения в галерею, блокирующую приложение с сообщением UIAlertView без кнопок, уведомляющих о процессе.С помощью этой реализации я решил проблему.

Если вы хотите сохранить несколько изображений одновременно, вы можете найти другую проблему.Посмотрите на этот вопрос и ответьте также: https://stackoverflow.com/a/8177014

...