Я разрабатываю фреймворк в 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];