Пустой фотоальбом с использованием ALAssetsLibrary скрывает UIButton
Я использую немного кода, чтобы просто иметь возможность установить эскиз UIButton
быть скрытым или нет, и если он не скрыт, возьмите последний эскиз из ALAssetsGroup
и установить UIButton
Это изображение с миниатюрой. Однако этот код не работает, если вы создаете новый фотоальбом в приложении Photos и оставляете его пустым без каких-либо фотографий; это терпит неудачу, потому что фотография выбирает UIButton
не должны быть скрыты, поскольку в приложении "Фотографии" действительно есть другие действительные фотографии: вот скриншот того, что я описываю:
Может кто-нибудь помочь указать мне правильное направление, чтобы решить эту проблему? Спасибо
Вот код, который я использую из двух методов:
- (void)getThumbnailForPhotoLibraryButton
{
ALAssetsLibrary *assetLibrary = [[ALAssetsLibrary alloc] init];
if ([ALAssetsLibrary authorizationStatus] == ALAuthorizationStatusAuthorized)
{
[assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop)
{
if (group)
{
*stop = YES;
NSArray *photoArray = [self getContentFrom:group withAssetFilter:[ALAssetsFilter allPhotos]];
if (photoArray.count > 0)
{
UIImage *thumbnail = [photoArray objectAtIndex:0];
[self.photoLibraryButton setImage:thumbnail forState:UIControlStateNormal];
self.photoLibraryButton.hidden = NO;
}
else
{
self.photoLibraryButton.hidden = YES;
}
}
}
failureBlock:^(NSError *error)
{}];
}
}
- (NSMutableArray *)getContentFrom:(ALAssetsGroup *)group withAssetFilter:(ALAssetsFilter *)filter
{
NSMutableArray *contentArray = [NSMutableArray array];
[group setAssetsFilter:filter];
[group enumerateAssetsWithOptions:NSEnumerationReverse usingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop)
{
if (result)
{
*stop = YES;
[contentArray addObject:[UIImage imageWithCGImage:[result thumbnail]]];
}
}];
return contentArray;
}
1 ответ
Как указал rmaddy, я слишком рано остановил блок с неправильной условной проверкой:
Это решило это:
if ([ALAssetsLibrary authorizationStatus] == ALAuthorizationStatusAuthorized)
{
[assetLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop)
{
if (group && group.numberOfAssets >= 1)
{
*stop = YES;
NSArray *photoArray = [self getContentFrom:group withAssetFilter:[ALAssetsFilter allPhotos]];
if (photoArray.count >= 1)
{
UIImage *thumbnail = [photoArray objectAtIndex:0];
[self.photoLibraryButton setImage:thumbnail forState:UIControlStateNormal];
self.photoLibraryButton.hidden = NO;
}
else
{
self.photoLibraryButton.hidden = YES;
}
}
}
failureBlock:^(NSError *error)
{}];
}