[iOS] [Generic] Creating an image format with an unknown type is an error

Objective-C
スポンサーリンク
こんにちは。 雑食会社員🐼くま子です
スポンサーリンク

問題

PHAssetで写真を取得する時、写真を新しい順に取得しようとoptionを設定したら、
たまに(すべての写真ではない)下記のエラーが出て、resultHandlerUIImagenilになってしまった。

[Generic] Creating an image format with an unknown type is an error

原因

PHImageRequestOptionssetNetworkAccessAllowedNOになっていたからっぽい。

PHImageRequestOptions *options = [PHImageRequestOptions new];時には、
setNetworkAccessAllowedの値はデフォルトではNOになる。(確認済み)

写真を古い順で取得していたとき(=options:nilのとき)は当現象は起こらなかったため、
requestImageForAssetoptionsnilのときは、デフォルトでYESだった?(推測)
(そんなややこしいことがあるのか?)

解決策

PHImageRequestOptions *options = [PHImageRequestOptions new];
[options setDeliveryMode:PHImageRequestOptionsDeliveryModeHighQualityFormat];
[options setNetworkAccessAllowed:YES];
if(asset) {
    [[PHImageManager defaultManager] requestImageForAsset:asset
                                               targetSize:PHImageManagerMaximumSize
                                              contentMode:PHImageContentModeDefault
                                                  options:options
                                            resultHandler:^(UIImage *image, NSDictionary *info) {
                                                // resultHandlerは低画質→高画質と複数回呼ばれることもあるため、高画質の時のみ取得
                                                // (PHImageRequestOptionsDeliveryModeHighQualityFormatがセットされていたら1度しか呼ばれないはず)
                                                if ([info[PHImageResultIsDegradedKey] boolValue] == NO) {
                                                    if (image) {
                                                        [NSThread detachNewThreadSelector:@selector(addImage:) toTarget:self withObject:image];
                                                    } else {
                                                        [NSThread detachNewThreadSelector:@selector(addImageEnd:) toTarget:self withObject:nil];
                                                    }
                                                }
                                            }];
}

しかし

setNetworkAccessAllowedをコメントアウトしても再現しなくなってしまった…。原因が違うのかもしれない…。

参考

Forbidden - Stack Exchange

コメント