如何使用“照片”框架从iOS的“相机胶卷”中获取最新照片?

时间:2019-05-28 16:36:00

标签: ios objective-c phasset photosframework

我正在开发iOS框架。我的框架中有一个功能,可以通过使用“照片”框架从“相机胶卷”中获取最新图像。此功能在使用我的框架的大多数项目中都能成功运行。但是它仅在这些项目中的一个项目上崩溃。我尝试了几种方法来修复此崩溃,但此崩溃没有任何改变。

我检查了此项目设置,但与项目设置没有任何区别。我也检查了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]];
                 });
             }];
        }
    }
}

我将日志放在上述函数中以查找崩溃的位置。并在以下代码后崩溃。我不知道问题所在。在项目设置中是否有限制以达到“相机胶卷”,或者此问题与线程有关?

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

1 个答案:

答案 0 :(得分:0)

如果同样使用UIImagePickerController发生崩溃,则很可能是此设备上的iOS照片库出现问题。 iOS照片库是内置的Core-Data数据库,并且可能已损坏。您是否查看过崩溃报告。如果您看到任何SQL- / Core-Data问题,则表明数据库有问题。

相关问题