PHImageManager requestImageForAsset возвращает ненулевой, но неверный результат - PullRequest
0 голосов
/ 10 июля 2019

У меня есть контроллер просмотра страниц, который подготавливает несколько контроллеров просмотра (и показывает по одному за раз).Каждый контроллер представления загружает соответствующий актив на основе localIdentifier актива.Работает нормально большую часть времени.Но если он пытается загрузить ресурс, который был удален из Camera Roll или синхронизированных альбомов с Mac, контроллер представления автоматически отключается.Причина, по которой ресурс попадает в массив локальных идентификаторов, в первую очередь, заключается в том, что ресурс по какой-то причине остается на вкладке моментов в приложении «Фото» (но, опять же, его нет в Camera Roll или синхронизированных альбомах).

// Get the image
PHCachingImageManager *imageManager = [[PHCachingImageManager alloc] init];
CGSize targetSize = CGSizeZero;
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
    // iPhone
    targetSize = CGSizeMake(actualSizedImageRect.size.width,actualSizedImageRect.size.height);
} else {
    // iPad
    targetSize = CGSizeMake(2000,2000);
}
PHImageRequestOptions *options = [[PHImageRequestOptions alloc]init];
options.deliveryMode = PHImageRequestOptionsDeliveryModeOpportunistic;
options.resizeMode   = PHImageRequestOptionsResizeModeNone;
options.version      = PHImageRequestOptionsVersionCurrent;
options.progressHandler = ^(double progress, NSError *error, BOOL *stop, NSDictionary *dictionary) {
    dispatch_async(dispatch_get_main_queue(), ^{
    });
};
[imageManager requestImageForAsset:self.asset
                             targetSize:targetSize
                            contentMode:PHImageContentModeAspectFit
                                options:options
                          resultHandler:^(UIImage *result, NSDictionary *info) {
                              dispatch_async(dispatch_get_main_queue(), ^{
                                  [self.assetImageView setImage:result]; //iwashere memo when a photo that no longer exists in albums (but in moments) is about to be presented, above result receives an incorrect image. That's probably causing issues with storyboard constraint so the view controller dismisses automatically.
                                  if (@available(iOS 11.0, *)){
                                      if (self.asset.playbackStyle == PHAssetPlaybackStyleLivePhoto){
                                          [self.assetImageView setHidden:YES];
                                      }
                                  }
                              });
                          }];

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

Если он возвращает ноль, я могу просто решить не загружать его в self.assetImageView, но даже когда возвращается неправильное изображение, результат не равен нолю.Я хочу знать, есть ли способ выяснить, действительно ли возвращенный результат принадлежит активу.

...