Как получить самую последнюю фотографию из Camera Roll на iOS с помощью фреймворка Photos? - PullRequest
0 голосов
/ 28 мая 2019

Я разрабатываю фреймворк в iOS.В моем фреймворке есть функция, позволяющая получать самое последнее изображение из Camera Roll с помощью фреймворка Photos.Эта функция успешно работает в большинстве проектов, в которых используется мой фреймворк.Но он падает только на один проект из этих проектов.Я пробовал несколько способов исправить эту ошибку, но ничего не изменилось в этой аварии.

Я проверил настройки этого проекта, но не смог найти никаких отличий от настроек своего проекта.Также я проверил разрешение галереи в файле plist.Также есть интересный момент.В этом проекте успешно используются почти все функции моей библиотеки, но также происходит сбой, когда моя библиотека пытается достичь UIImagePickerController в этом проекте.

@interface Controller () 
{
    UIBarButtonItem *barButtonItem;
}

@property(nonatomic, strong) PHFetchResult *fetchResult;
@property(nonatomic, strong) PHAsset *lastAsset;

@end

// calling this in the main thread
- (void)checkGalleryPermission
{
    PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
        if (status == PHAuthorizationStatusAuthorized)
        {
            [self setLastGalleryImageToPhotoGallery];
        }
        else if (status == PHAuthorizationStatusNotDetermined)
        {
            [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status)
                {
                    if (status == PHAuthorizationStatusAuthorized)
                    {
                        dispatch_async(dispatch_get_main_queue(), ^{

                            [self setLastGalleryImageToPhotoGallery];
                        });
                     }
                }];
        }
}

- (void)setLastGalleryImageToPhotoGallery
{
    PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init];
    fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]];
    self.fetchResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions];
    if (self.fetchResult != nil)
    {
        self.lastAsset = [self.fetchResult lastObject];
        if (self.lastAsset != nil)
        {
            PHImageRequestOptions *imageRequestOptions = [[PHImageRequestOptions alloc] init];
            imageRequestOptions.deliveryMode = PHImageRequestOptionsDeliveryModeFastFormat;
            imageRequestOptions.synchronous = YES; // tried NO
            imageRequestOptions.version = PHImageRequestOptionsVersionCurrent;
            [[PHImageManager defaultManager] requestImageForAsset:self.lastAsset targetSize:CGSizeMake(42.0f, 42.0f) contentMode:PHImageContentModeAspectFill options:imageRequestOptions resultHandler:^(UIImage *result, NSDictionary *info)
             {
                 dispatch_async(dispatch_get_main_queue(), ^{

                     [self->barButtonItem setImage:[result imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal]];
                 });
             }];
        }
    }
}

Я поместил логи в вышеуказанные функции, чтобы найти, где происходит сбой.И он вылетает после кода ниже.Я не мог понять проблему.Есть ли какие-либо ограничения в настройках проекта для достижения Camera Roll или эта проблема связана с потоком?

self.fetchResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions];

1 Ответ

0 голосов
/ 21 июня 2019

Если такой же сбой происходит и при использовании UIImagePickerController, скорее всего, существует проблема с библиотекой фотографий iOS на этом одном устройстве.IOS Photo Library - это база данных Core-Data, которая может быть повреждена.Вы смотрели отчет о сбое.Если вы видите какие-либо проблемы с SQL / Core-Data, это может указывать на проблемы с базой данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...