2017-09-23 4 views
7

を画像データを読み込むことができません、写真の資産は今ゆっくりロードし、私は、コンソールにこのメッセージが表示されます:iOSの11:[ImageManagerの] iOSの11に更新した後

[ImageManagerの]画像データを読み込むことができません、 /VAR/

メディア/ DCIM/103APPLE/IMG_3064.JPG /モバイル

私は画像をロードするために、静的な関数を使用します:資産の

class func getAssetImage(asset: PHAsset, size: CGSize = CGSize.zero) -> UIImage? { 
    let manager = PHImageManager.default() 
    let option = PHImageRequestOptions() 
    option.isSynchronous = true 

    var assetImage: UIImage! 
    var scaleSize = size 
    if size == CGSize.zero { 
     scaleSize = CGSize(width: asset.pixelWidth, height: asset.pixelHeight) 
    } 

    manager.requestImage(for: asset, targetSize: scaleSize, contentMode: .aspectFit, options: option) { (image, nil) in 
     if let image = image { 
      assetImage = image 
     } 
    } 
    if assetImage == nil { 
     manager.requestImageData(for: asset, options: option, resultHandler: { (data, _, orientation, _) in 
      if let data = data { 
       if let image = UIImage.init(data: data) { 
        assetImage = image 
       } 
      } 
     }) 
    } 
    return assetImage 
} 

リクエスト画像は、通常は常に成功し、このメッセージを出力します。 requestImageData関数のみを使用すると、そのようなメッセージは表示されませんが、Appleカメラで作成した写真の向きが失われ、大量の画像を読み込んでいる間にさらに問題が発生します(アプリで画像スライドショーを使用します)。

アップルはいつもアップデートをするつもりです、多分誰かが解決策を得ましたか?ユーザーのカメラに大きなリストがある場合、資産を読み込むことさえできません。 requestImageDataへの切り替えは、今では頻繁にデータを取得するため、私にとってはオプションではありません。

私はこの機能を1回だけ呼び出すことを指摘したいと思います。 UITableViewなどでは使用されていません。私はグローバルに初期化されたマネージャとオプションを持つ親指のために他のコードを使用していますので、資産はまったくゼロではありません。 ユーザーが特定の親指をクリックしたときにのみ呼び出します。 ギャラリーに5000枚の写真があると、アセットへの接続が過負荷になってしまい、後でリクエストやクラッシュを処理できません。 多くの質問があります。

+0

iOS 11にアップグレードしてから同じ問題が発生しています。サムネイル用に十分なサイズ(256 x 256)を要求すると、すべてが読み込まれます。同じコードを大きなサイズに使用すると、約20%で失敗します。まだパターンを見つけていない。 – user1055568

+0

修正プログラムを見つけましたか? – kye

+0

本当は、警告は依然として永続的です。 –

答えて

-2

これはiOS 11のバグだと思われますが、同期オプションfalseを設定することで回避できます。非同期配信を処理するコードを書き直しました。おそらく、あなたは速い修正のためにsync(execute :)を使うことができます。

また、私はこの問題がiCloud共有によって配信された写真でのみ発生したと考えています。

+2

それは私のために働かなかった。 Photosフレームワークへの呼び出しを最適化すると、全体的なパフォーマンスが向上したようです。今度は、OperationQueueアセットを取得し、後でUIアイテムに対して非同期に設定します。 私はネットワーク写真を無効にしているので、間違いなくiCloudには入っていませんし、sync/asyncもほとんど同じです。 これはまだ別のiOSバグだと思われます。現在、資産はこれまでよりもはるかに低速です。 –

+0

私はasyncが最初に私のために働かなかったと思うが、私はそれが働くように変更されたものを覚えていない。現在動作しているのは、deliveryMode = PHImageRequestOptionsDeliveryModeOpportunistic、contentMode PHImageContentModeAspectFillの設定です。ログメッセージは引き続き表示されますが、最終的にフルサイズのイメージが到着します。 – user1055568

0

メソッド「requestImageData」を次のオプションで試すことができます。これはiOS 11.2(デバイスとシミュレータの両方)の私にとってはうまくいった。

関連する問題