Пустой фотоальбом с использованием 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)
     {}];
}
Другие вопросы по тегам