Я реализовал пользовательскую галерею с двумя 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 в этом случае?