2015-09-07 6 views
0

При использовании следующего кода он получает мое последнее изображение, но оно дублирует его. Он всегда получает последнее изображение, но возвращается в пару:Получение последней фотографии из библиотеки фотографий пользователей, возвращающей две фотографии

UIImageView *imageView = (UIImageView *) [self.photoCollectionView viewWithTag:101]; 
PHFetchOptions *fetchOptions = [[PHFetchOptions alloc] init]; 
fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]]; 
PHFetchResult *fetchResult = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions]; 
PHAsset *lastAsset = [fetchResult lastObject]; 
[[PHImageManager defaultManager] requestImageForAsset:lastAsset 
           targetSize:imageView.bounds.size 
           contentMode:PHImageContentModeAspectFill 
           options:nil 
           resultHandler:^(UIImage *result, NSDictionary *info) { 
           NSLog(@"PHImageManager request results %@ and info %@", result, info); 
           dispatch_async(dispatch_get_main_queue(), ^{ 
            [user_photos addObject:result]; 
            NSLog(@"%lu",user_photos.count); 
            [self.photoCollectionView reloadData]; 
            NSLog(@"%lu",user_photos.count); 
           }); 
}]; 

Почему-то это происходит? Вот утверждение журнала:

2015-09-06 21:48:22.153[41357:11390462] PHImageManager request results <UIImage: 0x7fd1336b8f40>, {60, 40} and info { 
PHImageFileOrientationKey = 0; 
PHImageResultDeliveredImageFormatKey = 4031; 
PHImageResultIsDegradedKey = 1; 
PHImageResultRequestIDKey = 1; 
PHImageResultWantedImageFormatKey = 5003; 
} 
2015-09-06 21:48:22.158[41357:11390462] 2 
2015-09-06 21:48:22.159[41357:11390462] 2 

2015-09-06 21:48:22.166[41357:11390462] PHImageManager request results <UIImage: 0x7fd13374c3b0>, {386, 256} and info { 
PHImageFileOrientationKey = 0; 
PHImageResultDeliveredImageFormatKey = 5003; 
PHImageResultIsDegradedKey = 0; 
PHImageResultRequestIDKey = 1; 
PHImageResultWantedImageFormatKey = 5003; 
} 
2015-09-06 21:48:22.167[41357:11390462] 3 
2015-09-06 21:48:22.167[41357:11390462] 3 

Это происходит в тренажере & на устройстве. не используя стороннее программное обеспечение, не то, что было бы важно, я думаю. почему его зовут дважды? я называю это в блоке uialertaction

ответ

0

Ну, после некоторого исследования того, что делает «PHImageResultIsDegradedKey», и, естественно, оно сводилось к тому, что ОС получало данные изображения, и после того, как оно получилось, оно изменило его размер на качество выход на основе настроек, и поэтому я увидел второе изображение.

Так что я был добавлен параметры PHImageRequestOptions до фактического запроса для данного актива и извлекаться только фото я хотел:

... 
PHAsset *lastAsset = [fetchResult lastObject]; 
PHImageRequestOptions * options = [[PHImageRequestOptions alloc] init]; 
options.deliveryMode = PHImageRequestOptionsDeliveryModeHighQualityFormat; 
options.synchronous = NO; 
options.resizeMode = PHImageRequestOptionsVersionOriginal; 
options.networkAccessAllowed = NO; 
[[PHImageManager defaultManager] requestImageForAsset:lastAsset 
          targetSize:imageView.bounds.size 
          contentMode:PHImageContentModeAspectFit 
          options:options 
          resultHandler:^(UIImage *result, NSDictionary *info) { 
          ... 
0

Replace PHAsset *lastAsset=[fetchResult lastObject]; в коде только с

PHAsset *lastAsset=fetchResult;