2017-11-26 22 views
1

画像のバックグラウンドダウンロードがトリガーされました。成功する - 位置は実際のイメージへのパスです。エラーメッセージは表示されませんが、画像は写真アプリに表示されません。私はNSPhotoLibraryUsageDescription Info.plistキーを設定しました。アプリには写真にアクセスする権利があります。私は知っている、このコードは別のバックグラウンドスレッドをトリガしますが、 "didFinishDownloadingTo"が終了した後も "location"ファイルが残っているので問題はありません。 JPGファイルをカメラロールに保存する際には何か面倒なことはありますか?ダウンロードした画像をPHPhotoLibraryのカメラロールに保存します。

func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) { 

     PHPhotoLibrary.shared().performChanges({ 
      print("starting") 
      let req = PHAssetCreationRequest.forAsset() 
      req.isFavorite = true; 

      let options = PHAssetResourceCreationOptions(); 
      options.shouldMoveFile = true; 

      req.addResource(with: PHAssetResourceType.photo, fileURL: location, options: options) 
     }) 
    } 

答えて

3

あなたはaddResourceを間違って使用しています。あなたが持っているものは資源ではありません。それはイメージです。だから、最初に、URLからデータをロードし、イメージにそれを回す:あなたはそれが動作することを自分自身を説得してきた

 PHPhotoLibrary.shared().performChanges({ 
     PHAssetChangeRequest.creationRequestForAsset(from: im!) 
    }) 

一つ、あなたは:

if let url = location, let d = try? Data(contentsOf:url) { 
    let im = UIImage(data:d) 
} 

今だけ資産として画像を追加しますそれをドレッシングすることができます。

+0

"didFinishDownloadingTo location:URL"は、自分のサーバーからJPGをダウンロードします。私はむしろデコードし、再びエンコードするよりも、この生のjpgイメージを保存したいと思います。しかし、私はあなたのUIImageの代替が動作するかどうかを確認します。ありがとう! – Mick

+0

performChanges内のコード行に対してデバッガが停止しません。 UIImageを使用してもこれまでのところ違いはありませんでした。なぜこのコードブロックが実行されていないのかわかりません。 – Mick

+0

私は理解していません。私が物事をしている順序に注意してください。それ以外の場合は破壊されるので、UIImage _immediately_を抽出します。私が言ったことをしていますか? UIImageは抽出されていますか? 'performChanges'は呼ばれますか?バックグラウンドスレッドの場合は、メインスレッドのヘルプにステップしますか? – matt

関連する問題