2017-11-26 20 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에서 데이터를로드하고 이미지로 돌려 :

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

이제 단지 자산으로 이미지를 추가 : 당신이 작품을 그 자신을 설득 한

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

한 경우 그것을 드레싱 시작할 수 있습니다.

+0

"didFinishDownloadingTo 위치 : URL"이 내 서버에서 JPG를 다운로드합니다. 차라리 디코딩하고 다시 인코딩하는 것보다이 원시 jpg 이미지를 저장하고 싶습니다. 하지만 UIImage 대안이 작동하는지 확인하겠습니다. 감사! – Mick

+0

performChanges 내의 코드 행에 대해 디버거가 중지되지 않습니다. 나는 UIImage를 사용하는 것이 지금까지 차이를 만들지 않은 이유라고 생각합니다. 이 코드 블록이 실행되지 않는 이유를 모르겠습니다. – Mick

+0

나는 이해하지 못한다. 나는 일을하는 순서를 주목하라. 그렇지 않으면 UIImage가 즉각적으로 추출됩니다. 내가 한 말 한거야? UIImage가 추출 되었습니까? 'performChanges'가 불려 갔습니까? 백그라운드 스레드를 사용 중이라면 주 스레드 도움말로 이동합니까? – matt