問題
PHAsset
で写真を取得する時、写真を新しい順に取得しようとoptionを設定したら、
たまに(すべての写真ではない)下記のエラーが出て、resultHandler
のUIImage
がnil
になってしまった。
[Generic] Creating an image format with an unknown type is an error
原因
PHImageRequestOptions
でsetNetworkAccessAllowed
がNO
になっていたからっぽい。
PHImageRequestOptions *options = [PHImageRequestOptions new];
時には、setNetworkAccessAllowed
の値はデフォルトではNO
になる。(確認済み)
写真を古い順で取得していたとき(=options:nil
のとき)は当現象は起こらなかったため、requestImageForAsset
のoptions
がnil
のときは、デフォルトで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
コメント